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 JSON,
259 JSONFILE,
260 KEY,
261 LAG,
262 LANGUAGE,
263 LARGE,
264 LAST,
265 LAST_VALUE,
266 LATERAL,
267 LEAD,
268 LEADING,
269 LEFT,
270 LEVEL,
271 LIKE,
272 LIKE_REGEX,
273 LIMIT,
274 LISTAGG,
275 LN,
276 LOCAL,
277 LOCALTIME,
278 LOCALTIMESTAMP,
279 LOCATION,
280 LOWER,
281 MANAGEDLOCATION,
282 MATCH,
283 MATERIALIZED,
284 MAX,
285 MEMBER,
286 MERGE,
287 METADATA,
288 METHOD,
289 MIN,
290 MINUTE,
291 MOD,
292 MODIFIES,
293 MODULE,
294 MONTH,
295 MSCK,
296 MULTISET,
297 NATIONAL,
298 NATURAL,
299 NCHAR,
300 NCLOB,
301 NEW,
302 NEXT,
303 NO,
304 NONE,
305 NORMALIZE,
306 NOSCAN,
307 NOT,
308 NTH_VALUE,
309 NTILE,
310 NULL,
311 NULLIF,
312 NULLS,
313 NUMERIC,
314 OBJECT,
315 OCCURRENCES_REGEX,
316 OCTET_LENGTH,
317 OF,
318 OFFSET,
319 OLD,
320 ON,
321 ONLY,
322 OPEN,
323 OR,
324 ORC,
325 ORDER,
326 OUT,
327 OUTER,
328 OUTPUTFORMAT,
329 OVER,
330 OVERFLOW,
331 OVERLAPS,
332 OVERLAY,
333 OVERWRITE,
334 PARAMETER,
335 PARQUET,
336 PARTITION,
337 PARTITIONED,
338 PARTITIONS,
339 PERCENT,
340 PERCENTILE_CONT,
341 PERCENTILE_DISC,
342 PERCENT_RANK,
343 PERIOD,
344 PORTION,
345 POSITION,
346 POSITION_REGEX,
347 POWER,
348 PRECEDES,
349 PRECEDING,
350 PRECISION,
351 PREPARE,
352 PRIMARY,
353 PROCEDURE,
354 PURGE,
355 RANGE,
356 RANK,
357 RCFILE,
358 READ,
359 READS,
360 REAL,
361 RECURSIVE,
362 REF,
363 REFERENCES,
364 REFERENCING,
365 REGCLASS,
366 REGR_AVGX,
367 REGR_AVGY,
368 REGR_COUNT,
369 REGR_INTERCEPT,
370 REGR_R2,
371 REGR_SLOPE,
372 REGR_SXX,
373 REGR_SXY,
374 REGR_SYY,
375 RELEASE,
376 RENAME,
377 REPAIR,
378 REPEATABLE,
379 REPLACE,
380 RESTRICT,
381 RESULT,
382 RETURN,
383 RETURNS,
384 REVOKE,
385 RIGHT,
386 ROLLBACK,
387 ROLLUP,
388 ROW,
389 ROWID,
390 ROWS,
391 ROW_NUMBER,
392 SAVEPOINT,
393 SCHEMA,
394 SCOPE,
395 SCROLL,
396 SEARCH,
397 SECOND,
398 SELECT,
399 SENSITIVE,
400 SEQUENCEFILE,
401 SERDE,
402 SERIAL,
403 SERIALIZABLE,
404 SESSION,
405 SESSION_USER,
406 SET,
407 SHOW,
408 SIMILAR,
409 SMALLINT,
410 SOME,
411 SORT,
412 SPECIFIC,
413 SPECIFICTYPE,
414 SQL,
415 SQLEXCEPTION,
416 SQLSTATE,
417 SQLWARNING,
418 SQRT,
419 START,
420 STATIC,
421 STATISTICS,
422 STDDEV_POP,
423 STDDEV_SAMP,
424 STDIN,
425 STORED,
426 STRING,
427 SUBMULTISET,
428 SUBSTRING,
429 SUBSTRING_REGEX,
430 SUCCEEDS,
431 SUM,
432 SYMMETRIC,
433 SYNC,
434 SYSTEM,
435 SYSTEM_TIME,
436 SYSTEM_USER,
437 TABLE,
438 TABLESAMPLE,
439 TBLPROPERTIES,
440 TEMP,
441 TEMPORARY,
442 TEXT,
443 TEXTFILE,
444 THEN,
445 TIES,
446 TIME,
447 TIMESTAMP,
448 TIMEZONE_HOUR,
449 TIMEZONE_MINUTE,
450 TINYINT,
451 TO,
452 TOP,
453 TRAILING,
454 TRANSACTION,
455 TRANSLATE,
456 TRANSLATE_REGEX,
457 TRANSLATION,
458 TREAT,
459 TRIGGER,
460 TRIM,
461 TRIM_ARRAY,
462 TRUE,
463 TRUNCATE,
464 TRY_CAST,
465 UESCAPE,
466 UNBOUNDED,
467 UNCOMMITTED,
468 UNION,
469 UNIQUE,
470 UNKNOWN,
471 UNNEST,
472 UPDATE,
473 UPPER,
474 USER,
475 USING,
476 UUID,
477 VALUE,
478 VALUES,
479 VALUE_OF,
480 VARBINARY,
481 VARCHAR,
482 VARYING,
483 VAR_POP,
484 VAR_SAMP,
485 VERBOSE,
486 VERSIONING,
487 VIEW,
488 VIRTUAL,
489 WHEN,
490 WHENEVER,
491 WHERE,
492 WIDTH_BUCKET,
493 WINDOW,
494 WITH,
495 WITHIN,
496 WITHOUT,
497 WORK,
498 WRITE,
499 YEAR,
500 ZONE
501);
502
503pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
506 Keyword::WITH,
508 Keyword::EXPLAIN,
509 Keyword::ANALYZE,
510 Keyword::SELECT,
511 Keyword::WHERE,
512 Keyword::GROUP,
513 Keyword::SORT,
514 Keyword::HAVING,
515 Keyword::ORDER,
516 Keyword::TOP,
517 Keyword::LATERAL,
518 Keyword::VIEW,
519 Keyword::LIMIT,
520 Keyword::OFFSET,
521 Keyword::FETCH,
522 Keyword::UNION,
523 Keyword::EXCEPT,
524 Keyword::INTERSECT,
525 Keyword::ON,
527 Keyword::JOIN,
528 Keyword::INNER,
529 Keyword::CROSS,
530 Keyword::FULL,
531 Keyword::LEFT,
532 Keyword::RIGHT,
533 Keyword::NATURAL,
534 Keyword::USING,
535 Keyword::CLUSTER,
536 Keyword::DISTRIBUTE,
537 Keyword::OUTER,
539];
540
541pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
544 Keyword::WITH,
546 Keyword::EXPLAIN,
547 Keyword::ANALYZE,
548 Keyword::SELECT,
549 Keyword::WHERE,
550 Keyword::GROUP,
551 Keyword::SORT,
552 Keyword::HAVING,
553 Keyword::ORDER,
554 Keyword::TOP,
555 Keyword::LATERAL,
556 Keyword::VIEW,
557 Keyword::LIMIT,
558 Keyword::OFFSET,
559 Keyword::FETCH,
560 Keyword::UNION,
561 Keyword::EXCEPT,
562 Keyword::INTERSECT,
563 Keyword::CLUSTER,
564 Keyword::DISTRIBUTE,
565 Keyword::FROM,
567];