1#[cfg(feature = "serde")]
26use serde::{Deserialize, Serialize};
27
28#[cfg(feature = "visitor")]
29use sqlparser_derive::{Visit, VisitMut};
30
31macro_rules! kw_def {
34 ($ident:ident = $string_keyword:expr) => {
35 pub const $ident: &'static str = $string_keyword;
36 };
37 ($ident:ident) => {
38 kw_def!($ident = stringify!($ident));
39 };
40}
41
42macro_rules! define_keywords {
45 ($(
46 $ident:ident $(= $string_keyword:expr)?
47 ),*) => {
48 #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
49 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50 #[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
51 #[allow(non_camel_case_types)]
52 pub enum Keyword {
53 NoKeyword,
54 $($ident),*
55 }
56
57 pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
58 $(Keyword::$ident),*
59 ];
60
61 $(kw_def!($ident $(= $string_keyword)?);)*
62 pub const ALL_KEYWORDS: &[&str] = &[
63 $($ident),*
64 ];
65 };
66}
67
68define_keywords!(
70 ABORT,
71 ABS,
72 ABSOLUTE,
73 ACTION,
74 ADD,
75 ADMIN,
76 AGAINST,
77 ALL,
78 ALLOCATE,
79 ALTER,
80 ALWAYS,
81 ANALYZE,
82 AND,
83 ANTI,
84 ANY,
85 APPLY,
86 ARCHIVE,
87 ARE,
88 ARRAY,
89 ARRAY_AGG,
90 ARRAY_MAX_CARDINALITY,
91 AS,
92 ASC,
93 ASENSITIVE,
94 ASSERT,
95 ASYMMETRIC,
96 AT,
97 ATOMIC,
98 AUTHORIZATION,
99 AUTOINCREMENT,
100 AUTO_INCREMENT,
101 AVG,
102 AVRO,
103 BACKWARD,
104 BEGIN,
105 BEGIN_FRAME,
106 BEGIN_PARTITION,
107 BETWEEN,
108 BIGDECIMAL,
109 BIGINT,
110 BIGNUMERIC,
111 BINARY,
112 BLOB,
113 BOOLEAN,
114 BOTH,
115 BTREE,
116 BY,
117 BYPASSRLS,
118 BYTEA,
119 CACHE,
120 CALL,
121 CALLED,
122 CARDINALITY,
123 CASCADE,
124 CASCADED,
125 CASE,
126 CAST,
127 CEIL,
128 CEILING,
129 CENTURY,
130 CHAIN,
131 CHANGE,
132 CHAR,
133 CHARACTER,
134 CHARACTERS,
135 CHARACTER_LENGTH,
136 CHARSET,
137 CHAR_LENGTH,
138 CHECK,
139 CLOB,
140 CLONE,
141 CLOSE,
142 CLUSTER,
143 COALESCE,
144 COLLATE,
145 COLLATION,
146 COLLECT,
147 COLUMN,
148 COLUMNS,
149 COMMENT,
150 COMMIT,
151 COMMITTED,
152 COMPRESSION,
153 COMPUTE,
154 CONDITION,
155 CONFLICT,
156 CONNECT,
157 CONNECTION,
158 CONSTRAINT,
159 CONTAINS,
160 CONVERT,
161 COPY,
162 CORR,
163 CORRESPONDING,
164 COUNT,
165 COVAR_POP,
166 COVAR_SAMP,
167 CREATE,
168 CREATEDB,
169 CREATEROLE,
170 CROSS,
171 CSV,
172 CUBE,
173 CUME_DIST,
174 CURRENT,
175 CURRENT_CATALOG,
176 CURRENT_DATE,
177 CURRENT_DEFAULT_TRANSFORM_GROUP,
178 CURRENT_PATH,
179 CURRENT_ROLE,
180 CURRENT_ROW,
181 CURRENT_SCHEMA,
182 CURRENT_TIME,
183 CURRENT_TIMESTAMP,
184 CURRENT_TRANSFORM_GROUP_FOR_TYPE,
185 CURRENT_USER,
186 CURSOR,
187 CYCLE,
188 DATA,
189 DATABASE,
190 DATE,
191 DATETIME,
192 DAY,
193 DEALLOCATE,
194 DEC,
195 DECADE,
196 DECIMAL,
197 DECLARE,
198 DEFAULT,
199 DELETE,
200 DELIMITED,
201 DELIMITER,
202 DENSE_RANK,
203 DEREF,
204 DESC,
205 DESCRIBE,
206 DETERMINISTIC,
207 DIRECTORY,
208 DISCARD,
209 DISCONNECT,
210 DISTINCT,
211 DISTRIBUTE,
212 DO,
213 DOUBLE,
214 DOW,
215 DOY,
216 DROP,
217 DUPLICATE,
218 DYNAMIC,
219 EACH,
220 ELEMENT,
221 ELSE,
222 ENCODING,
223 END,
224 END_EXEC = "END-EXEC",
225 END_FRAME,
226 END_PARTITION,
227 ENGINE,
228 ENUM,
229 EPOCH,
230 EQUALS,
231 ERROR,
232 ESCAPE,
233 EVENT,
234 EVERY,
235 EXCEPT,
236 EXCLUDE,
237 EXEC,
238 EXECUTE,
239 EXISTS,
240 EXP,
241 EXPANSION,
242 EXPLAIN,
243 EXTENDED,
244 EXTERNAL,
245 EXTRACT,
246 FAIL,
247 FALSE,
248 FETCH,
249 FIELDS,
250 FILE,
251 FILTER,
252 FIRST,
253 FIRST_VALUE,
254 FLOAT,
255 FLOOR,
256 FOLLOWING,
257 FOR,
258 FORCE,
259 FORCE_NOT_NULL,
260 FORCE_NULL,
261 FORCE_QUOTE,
262 FOREIGN,
263 FORMAT,
264 FORWARD,
265 FRAME_ROW,
266 FREE,
267 FREEZE,
268 FROM,
269 FULL,
270 FULLTEXT,
271 FUNCTION,
272 FUNCTIONS,
273 FUSION,
274 GENERATED,
275 GET,
276 GLOBAL,
277 GRANT,
278 GRANTED,
279 GRAPHVIZ,
280 GROUP,
281 GROUPING,
282 GROUPS,
283 HASH,
284 HAVING,
285 HEADER,
286 HIVEVAR,
287 HOLD,
288 HOUR,
289 IDENTITY,
290 IF,
291 IGNORE,
292 ILIKE,
293 IMMUTABLE,
294 IN,
295 INCREMENT,
296 INDEX,
297 INDICATOR,
298 INHERIT,
299 INNER,
300 INOUT,
301 INPUTFORMAT,
302 INSENSITIVE,
303 INSERT,
304 INT,
305 INTEGER,
306 INTERSECT,
307 INTERSECTION,
308 INTERVAL,
309 INTO,
310 IS,
311 ISODOW,
312 ISOLATION,
313 ISOYEAR,
314 JAR,
315 JOIN,
316 JSON,
317 JSONFILE,
318 JULIAN,
319 KEY,
320 KILL,
321 LAG,
322 LANGUAGE,
323 LARGE,
324 LAST,
325 LAST_VALUE,
326 LATERAL,
327 LEAD,
328 LEADING,
329 LEFT,
330 LEVEL,
331 LIKE,
332 LIKE_REGEX,
333 LIMIT,
334 LISTAGG,
335 LN,
336 LOCAL,
337 LOCALTIME,
338 LOCALTIMESTAMP,
339 LOCATION,
340 LOCKED,
341 LOGIN,
342 LOWER,
343 MANAGEDLOCATION,
344 MATCH,
345 MATCHED,
346 MATERIALIZED,
347 MAX,
348 MAXVALUE,
349 MEDIUMINT,
350 MEMBER,
351 MERGE,
352 METADATA,
353 METHOD,
354 MICROSECOND,
355 MICROSECONDS,
356 MILLENIUM,
357 MILLENNIUM,
358 MILLISECOND,
359 MILLISECONDS,
360 MIN,
361 MINUTE,
362 MINVALUE,
363 MOD,
364 MODE,
365 MODIFIES,
366 MODULE,
367 MONTH,
368 MSCK,
369 MULTISET,
370 MUTATION,
371 NANOSECOND,
372 NANOSECONDS,
373 NATIONAL,
374 NATURAL,
375 NCHAR,
376 NCLOB,
377 NEW,
378 NEXT,
379 NO,
380 NOBYPASSRLS,
381 NOCREATEDB,
382 NOCREATEROLE,
383 NOINHERIT,
384 NOLOGIN,
385 NONE,
386 NOREPLICATION,
387 NORMALIZE,
388 NOSCAN,
389 NOSUPERUSER,
390 NOT,
391 NOTHING,
392 NOWAIT,
393 NTH_VALUE,
394 NTILE,
395 NULL,
396 NULLIF,
397 NULLS,
398 NUMERIC,
399 NVARCHAR,
400 OBJECT,
401 OCCURRENCES_REGEX,
402 OCTETS,
403 OCTET_LENGTH,
404 OF,
405 OFFSET,
406 OLD,
407 ON,
408 ONLY,
409 OPEN,
410 OPERATOR,
411 OPTION,
412 OPTIONS,
413 OR,
414 ORC,
415 ORDER,
416 OUT,
417 OUTER,
418 OUTPUTFORMAT,
419 OVER,
420 OVERFLOW,
421 OVERLAPS,
422 OVERLAY,
423 OVERWRITE,
424 OWNED,
425 PARAMETER,
426 PARQUET,
427 PARTITION,
428 PARTITIONED,
429 PARTITIONS,
430 PASSWORD,
431 PERCENT,
432 PERCENTILE_CONT,
433 PERCENTILE_DISC,
434 PERCENT_RANK,
435 PERIOD,
436 PLACING,
437 PLANS,
438 PORTION,
439 POSITION,
440 POSITION_REGEX,
441 POWER,
442 PRECEDES,
443 PRECEDING,
444 PRECISION,
445 PREPARE,
446 PRESERVE,
447 PRIMARY,
448 PRIOR,
449 PRIVILEGES,
450 PROCEDURE,
451 PROGRAM,
452 PURGE,
453 QUALIFY,
454 QUARTER,
455 QUERY,
456 QUOTE,
457 RANGE,
458 RANK,
459 RCFILE,
460 READ,
461 READS,
462 REAL,
463 RECURSIVE,
464 REF,
465 REFERENCES,
466 REFERENCING,
467 REGCLASS,
468 REGR_AVGX,
469 REGR_AVGY,
470 REGR_COUNT,
471 REGR_INTERCEPT,
472 REGR_R2,
473 REGR_SLOPE,
474 REGR_SXX,
475 REGR_SXY,
476 REGR_SYY,
477 RELATIVE,
478 RELEASE,
479 RENAME,
480 REPAIR,
481 REPEATABLE,
482 REPLACE,
483 REPLICATION,
484 RESTRICT,
485 RESULT,
486 RETURN,
487 RETURNING,
488 RETURNS,
489 REVOKE,
490 RIGHT,
491 ROLE,
492 ROLLBACK,
493 ROLLUP,
494 ROW,
495 ROWID,
496 ROWS,
497 ROW_NUMBER,
498 SAFE_CAST,
499 SAVEPOINT,
500 SCHEMA,
501 SCOPE,
502 SCROLL,
503 SEARCH,
504 SECOND,
505 SELECT,
506 SEMI,
507 SENSITIVE,
508 SEQUENCE,
509 SEQUENCEFILE,
510 SEQUENCES,
511 SERDE,
512 SERIALIZABLE,
513 SESSION,
514 SESSION_USER,
515 SET,
516 SETS,
517 SHARE,
518 SHOW,
519 SIMILAR,
520 SKIP,
521 SMALLINT,
522 SNAPSHOT,
523 SOME,
524 SORT,
525 SPATIAL,
526 SPECIFIC,
527 SPECIFICTYPE,
528 SQL,
529 SQLEXCEPTION,
530 SQLSTATE,
531 SQLWARNING,
532 SQRT,
533 STABLE,
534 START,
535 STATIC,
536 STATISTICS,
537 STDDEV_POP,
538 STDDEV_SAMP,
539 STDIN,
540 STDOUT,
541 STORED,
542 STRING,
543 SUBMULTISET,
544 SUBSTRING,
545 SUBSTRING_REGEX,
546 SUCCEEDS,
547 SUM,
548 SUPER,
549 SUPERUSER,
550 SWAP,
551 SYMMETRIC,
552 SYNC,
553 SYSTEM,
554 SYSTEM_TIME,
555 SYSTEM_USER,
556 TABLE,
557 TABLES,
558 TABLESAMPLE,
559 TBLPROPERTIES,
560 TEMP,
561 TEMPORARY,
562 TEXT,
563 TEXTFILE,
564 THEN,
565 TIES,
566 TIME,
567 TIMESTAMP,
568 TIMESTAMPTZ,
569 TIMETZ,
570 TIMEZONE,
571 TIMEZONE_HOUR,
572 TIMEZONE_MINUTE,
573 TINYINT,
574 TO,
575 TOP,
576 TRAILING,
577 TRANSACTION,
578 TRANSIENT,
579 TRANSLATE,
580 TRANSLATE_REGEX,
581 TRANSLATION,
582 TREAT,
583 TRIGGER,
584 TRIM,
585 TRIM_ARRAY,
586 TRUE,
587 TRUNCATE,
588 TRY_CAST,
589 TYPE,
590 UESCAPE,
591 UNBOUNDED,
592 UNCACHE,
593 UNCOMMITTED,
594 UNION,
595 UNIQUE,
596 UNKNOWN,
597 UNLOGGED,
598 UNNEST,
599 UNSIGNED,
600 UNTIL,
601 UPDATE,
602 UPPER,
603 USAGE,
604 USE,
605 USER,
606 USING,
607 UUID,
608 VALID,
609 VALUE,
610 VALUES,
611 VALUE_OF,
612 VARBINARY,
613 VARCHAR,
614 VARIABLES,
615 VARYING,
616 VAR_POP,
617 VAR_SAMP,
618 VERBOSE,
619 VERSIONING,
620 VIEW,
621 VIRTUAL,
622 VOLATILE,
623 WEEK,
624 WHEN,
625 WHENEVER,
626 WHERE,
627 WIDTH_BUCKET,
628 WINDOW,
629 WITH,
630 WITHIN,
631 WITHOUT,
632 WORK,
633 WRITE,
634 XOR,
635 YEAR,
636 ZONE
637);
638
639pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
642 Keyword::WITH,
644 Keyword::EXPLAIN,
645 Keyword::ANALYZE,
646 Keyword::SELECT,
647 Keyword::WHERE,
648 Keyword::GROUP,
649 Keyword::SORT,
650 Keyword::HAVING,
651 Keyword::ORDER,
652 Keyword::TOP,
653 Keyword::LATERAL,
654 Keyword::VIEW,
655 Keyword::LIMIT,
656 Keyword::OFFSET,
657 Keyword::FETCH,
658 Keyword::UNION,
659 Keyword::EXCEPT,
660 Keyword::INTERSECT,
661 Keyword::ON,
663 Keyword::JOIN,
664 Keyword::INNER,
665 Keyword::CROSS,
666 Keyword::FULL,
667 Keyword::LEFT,
668 Keyword::RIGHT,
669 Keyword::NATURAL,
670 Keyword::USING,
671 Keyword::CLUSTER,
672 Keyword::DISTRIBUTE,
673 Keyword::OUTER,
675 Keyword::SET,
676 Keyword::QUALIFY,
677];
678
679pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
682 Keyword::WITH,
684 Keyword::EXPLAIN,
685 Keyword::ANALYZE,
686 Keyword::SELECT,
687 Keyword::WHERE,
688 Keyword::GROUP,
689 Keyword::SORT,
690 Keyword::HAVING,
691 Keyword::ORDER,
692 Keyword::TOP,
693 Keyword::LATERAL,
694 Keyword::VIEW,
695 Keyword::LIMIT,
696 Keyword::OFFSET,
697 Keyword::FETCH,
698 Keyword::UNION,
699 Keyword::EXCEPT,
700 Keyword::INTERSECT,
701 Keyword::CLUSTER,
702 Keyword::DISTRIBUTE,
703 Keyword::FROM,
705 Keyword::INTO,
706];