1#[cfg(feature = "serde")]
27use serde::{Deserialize, Serialize};
28
29macro_rules! kw_def {
32 ($ident:ident = $string_keyword:expr) => {
33 pub const $ident: &'static str = $string_keyword;
34 };
35 ($ident:ident) => {
36 kw_def!($ident = stringify!($ident));
37 };
38}
39
40macro_rules! define_keywords {
43 ($(
44 $ident:ident $(= $string_keyword:expr)?
45 ),*) => {
46 #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
47 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
48 #[allow(non_camel_case_types)]
49 pub enum Keyword {
50 NoKeyword,
51 $($ident),*
52 }
53
54 pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
55 $(Keyword::$ident),*
56 ];
57
58 $(kw_def!($ident $(= $string_keyword)?);)*
59 pub const ALL_KEYWORDS: &[&str] = &[
60 $($ident),*
61 ];
62
63 };
64
65}
66
67define_keywords!(
69 ABORT,
70 ABS,
71 ACTION,
72 ADD,
73 ALL,
74 ALLOCATE,
75 ALTER,
76 ANALYZE,
77 AND,
78 ANY,
79 APPLY,
80 ARE,
81 ARRAY,
82 ARRAY_AGG,
83 ARRAY_MAX_CARDINALITY,
84 AS,
85 ASC,
86 ASENSITIVE,
87 ASSERT,
88 ASYMMETRIC,
89 AT,
90 ATOMIC,
91 AUTHORIZATION,
92 AUTOINCREMENT,
93 AUTO_INCREMENT,
94 AVG,
95 AVRO,
96 BEGIN,
97 BEGIN_FRAME,
98 BEGIN_PARTITION,
99 BETWEEN,
100 BIGINT,
101 BINARY,
102 BLOB,
103 BOOLEAN,
104 BOTH,
105 BY,
106 BYTEA,
107 CACHE,
108 CALL,
109 CALLED,
110 CARDINALITY,
111 CASCADE,
112 CASCADED,
113 CASE,
114 CAST,
115 CEIL,
116 CEILING,
117 CHAIN,
118 CHAR,
119 CHARACTER,
120 CHARACTER_LENGTH,
121 CHAR_LENGTH,
122 CHECK,
123 CLOB,
124 CLOSE,
125 CLUSTER,
126 COALESCE,
127 COLLATE,
128 COLLECT,
129 COLUMN,
130 COLUMNS,
131 COMMIT,
132 COMMITTED,
133 COMPUTE,
134 CONDITION,
135 CONNECT,
136 CONSTRAINT,
137 CONTAINS,
138 CONVERT,
139 COPY,
140 CORR,
141 CORRESPONDING,
142 COUNT,
143 COVAR_POP,
144 COVAR_SAMP,
145 CREATE,
146 CROSS,
147 CSV,
148 CUBE,
149 CUME_DIST,
150 CURRENT,
151 CURRENT_CATALOG,
152 CURRENT_DATE,
153 CURRENT_DEFAULT_TRANSFORM_GROUP,
154 CURRENT_PATH,
155 CURRENT_ROLE,
156 CURRENT_ROW,
157 CURRENT_SCHEMA,
158 CURRENT_TIME,
159 CURRENT_TIMESTAMP,
160 CURRENT_TRANSFORM_GROUP_FOR_TYPE,
161 CURRENT_USER,
162 CURSOR,
163 CYCLE,
164 DATABASE,
165 DATE,
166 DAY,
167 DEALLOCATE,
168 DEC,
169 DECIMAL,
170 DECLARE,
171 DEFAULT,
172 DELETE,
173 DELIMITED,
174 DENSE_RANK,
175 DEREF,
176 DESC,
177 DESCRIBE,
178 DETERMINISTIC,
179 DIRECTORY,
180 DISCONNECT,
181 DISTINCT,
182 DISTRIBUTE,
183 DOUBLE,
184 DROP,
185 DYNAMIC,
186 EACH,
187 ELEMENT,
188 ELSE,
189 END,
190 END_EXEC = "END-EXEC",
191 END_FRAME,
192 END_PARTITION,
193 EQUALS,
194 ERROR,
195 ESCAPE,
196 EVENT,
197 EVERY,
198 EXCEPT,
199 EXEC,
200 EXECUTE,
201 EXISTS,
202 EXP,
203 EXPLAIN,
204 EXTENDED,
205 EXTERNAL,
206 EXTRACT,
207 FAIL,
208 FALSE,
209 FETCH,
210 FIELDS,
211 FILTER,
212 FIRST,
213 FIRST_VALUE,
214 FLOAT,
215 FLOOR,
216 FOLLOWING,
217 FOR,
218 FOREIGN,
219 FORMAT,
220 FRAME_ROW,
221 FREE,
222 FROM,
223 FULL,
224 FUNCTION,
225 FUSION,
226 GET,
227 GLOBAL,
228 GRANT,
229 GROUP,
230 GROUPING,
231 GROUPS,
232 HAVING,
233 HEADER,
234 HIVEVAR,
235 HOLD,
236 HOUR,
237 IDENTITY,
238 IF,
239 IGNORE,
240 ILIKE,
241 IN,
242 INDEX,
243 INDICATOR,
244 INNER,
245 INOUT,
246 INPUTFORMAT,
247 INSENSITIVE,
248 INSERT,
249 INT,
250 INTEGER,
251 INTERSECT,
252 INTERSECTION,
253 INTERVAL,
254 INTO,
255 IS,
256 ISOLATION,
257 JOIN,
258 JSONFILE,
259 KEY,
260 LAG,
261 LANGUAGE,
262 LARGE,
263 LAST,
264 LAST_VALUE,
265 LATERAL,
266 LEAD,
267 LEADING,
268 LEFT,
269 LEVEL,
270 LIKE,
271 LIKE_REGEX,
272 LIMIT,
273 LISTAGG,
274 LN,
275 LOCAL,
276 LOCALTIME,
277 LOCALTIMESTAMP,
278 LOCATION,
279 LOWER,
280 MANAGEDLOCATION,
281 MATCH,
282 MATERIALIZED,
283 MAX,
284 MEMBER,
285 MERGE,
286 METADATA,
287 METHOD,
288 MIN,
289 MINUTE,
290 MOD,
291 MODIFIES,
292 MODULE,
293 MONTH,
294 MSCK,
295 MULTISET,
296 NATIONAL,
297 NATURAL,
298 NCHAR,
299 NCLOB,
300 NEW,
301 NEXT,
302 NO,
303 NONE,
304 NORMALIZE,
305 NOSCAN,
306 NOT,
307 NTH_VALUE,
308 NTILE,
309 NULL,
310 NULLIF,
311 NULLS,
312 NUMERIC,
313 OBJECT,
314 OCCURRENCES_REGEX,
315 OCTET_LENGTH,
316 OF,
317 OFFSET,
318 OLD,
319 ON,
320 ONLY,
321 OPEN,
322 OR,
323 ORC,
324 ORDER,
325 OUT,
326 OUTER,
327 OUTPUTFORMAT,
328 OVER,
329 OVERFLOW,
330 OVERLAPS,
331 OVERLAY,
332 OVERWRITE,
333 PARAMETER,
334 PARQUET,
335 PARTITION,
336 PARTITIONED,
337 PARTITIONS,
338 PERCENT,
339 PERCENTILE_CONT,
340 PERCENTILE_DISC,
341 PERCENT_RANK,
342 PERIOD,
343 PORTION,
344 POSITION,
345 POSITION_REGEX,
346 POWER,
347 PRECEDES,
348 PRECEDING,
349 PRECISION,
350 PREPARE,
351 PRIMARY,
352 PROCEDURE,
353 PURGE,
354 RANGE,
355 RANK,
356 RCFILE,
357 READ,
358 READS,
359 REAL,
360 RECURSIVE,
361 REF,
362 REFERENCES,
363 REFERENCING,
364 REGCLASS,
365 REGR_AVGX,
366 REGR_AVGY,
367 REGR_COUNT,
368 REGR_INTERCEPT,
369 REGR_R2,
370 REGR_SLOPE,
371 REGR_SXX,
372 REGR_SXY,
373 REGR_SYY,
374 RELEASE,
375 RENAME,
376 REPAIR,
377 REPEATABLE,
378 REPLACE,
379 RESTRICT,
380 RESULT,
381 RETURN,
382 RETURNS,
383 REVOKE,
384 RIGHT,
385 ROLLBACK,
386 ROLLUP,
387 ROW,
388 ROWID,
389 ROWS,
390 ROW_NUMBER,
391 SAVEPOINT,
392 SCHEMA,
393 SCOPE,
394 SCROLL,
395 SEARCH,
396 SECOND,
397 SELECT,
398 SENSITIVE,
399 SEQUENCEFILE,
400 SERDE,
401 SERIALIZABLE,
402 SESSION,
403 SESSION_USER,
404 SET,
405 SHOW,
406 SIMILAR,
407 SMALLINT,
408 SOME,
409 SORT,
410 SPECIFIC,
411 SPECIFICTYPE,
412 SQL,
413 SQLEXCEPTION,
414 SQLSTATE,
415 SQLWARNING,
416 SQRT,
417 START,
418 STATIC,
419 STATISTICS,
420 STDDEV_POP,
421 STDDEV_SAMP,
422 STDIN,
423 STORED,
424 STRING,
425 SUBMULTISET,
426 SUBSTRING,
427 SUBSTRING_REGEX,
428 SUCCEEDS,
429 SUM,
430 SYMMETRIC,
431 SYNC,
432 SYSTEM,
433 SYSTEM_TIME,
434 SYSTEM_USER,
435 TABLE,
436 TABLESAMPLE,
437 TBLPROPERTIES,
438 TEMP,
439 TEMPORARY,
440 TEXT,
441 TEXTFILE,
442 THEN,
443 TIES,
444 TIME,
445 TIMESTAMP,
446 TIMEZONE_HOUR,
447 TIMEZONE_MINUTE,
448 TINYINT,
449 TO,
450 TOP,
451 TRAILING,
452 TRANSACTION,
453 TRANSLATE,
454 TRANSLATE_REGEX,
455 TRANSLATION,
456 TREAT,
457 TRIGGER,
458 TRIM,
459 TRIM_ARRAY,
460 TRUE,
461 TRUNCATE,
462 TRY_CAST,
463 UESCAPE,
464 UNBOUNDED,
465 UNCOMMITTED,
466 UNION,
467 UNIQUE,
468 UNKNOWN,
469 UNNEST,
470 UPDATE,
471 UPPER,
472 USER,
473 USING,
474 UUID,
475 VALUE,
476 VALUES,
477 VALUE_OF,
478 VARBINARY,
479 VARCHAR,
480 VARYING,
481 VAR_POP,
482 VAR_SAMP,
483 VERBOSE,
484 VERSIONING,
485 VIEW,
486 VIRTUAL,
487 WHEN,
488 WHENEVER,
489 WHERE,
490 WIDTH_BUCKET,
491 WINDOW,
492 WITH,
493 WITHIN,
494 WITHOUT,
495 WORK,
496 WRITE,
497 YEAR,
498 ZONE
499);
500
501pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
504 Keyword::WITH,
506 Keyword::EXPLAIN,
507 Keyword::ANALYZE,
508 Keyword::SELECT,
509 Keyword::WHERE,
510 Keyword::GROUP,
511 Keyword::SORT,
512 Keyword::HAVING,
513 Keyword::ORDER,
514 Keyword::TOP,
515 Keyword::LATERAL,
516 Keyword::VIEW,
517 Keyword::LIMIT,
518 Keyword::OFFSET,
519 Keyword::FETCH,
520 Keyword::UNION,
521 Keyword::EXCEPT,
522 Keyword::INTERSECT,
523 Keyword::ON,
525 Keyword::JOIN,
526 Keyword::INNER,
527 Keyword::CROSS,
528 Keyword::FULL,
529 Keyword::LEFT,
530 Keyword::RIGHT,
531 Keyword::NATURAL,
532 Keyword::USING,
533 Keyword::CLUSTER,
534 Keyword::DISTRIBUTE,
535 Keyword::OUTER,
537];
538
539pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
542 Keyword::WITH,
544 Keyword::EXPLAIN,
545 Keyword::ANALYZE,
546 Keyword::SELECT,
547 Keyword::WHERE,
548 Keyword::GROUP,
549 Keyword::SORT,
550 Keyword::HAVING,
551 Keyword::ORDER,
552 Keyword::TOP,
553 Keyword::LATERAL,
554 Keyword::VIEW,
555 Keyword::LIMIT,
556 Keyword::OFFSET,
557 Keyword::FETCH,
558 Keyword::UNION,
559 Keyword::EXCEPT,
560 Keyword::INTERSECT,
561 Keyword::CLUSTER,
562 Keyword::DISTRIBUTE,
563 Keyword::FROM,
565];