1#[cfg(feature = "serde")]
31use serde::{Deserialize, Serialize};
32
33#[cfg(feature = "visitor")]
34use sqltk_parser_derive::{Visit, VisitMut};
35
36macro_rules! kw_def {
39 ($ident:ident = $string_keyword:expr) => {
40 pub const $ident: &'static str = $string_keyword;
41 };
42 ($ident:ident) => {
43 kw_def!($ident = stringify!($ident));
44 };
45}
46
47macro_rules! define_keywords {
50 ($(
51 $ident:ident $(= $string_keyword:expr)?
52 ),*) => {
53 #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
54 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
55 #[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
56 #[allow(non_camel_case_types)]
57 pub enum Keyword {
58 NoKeyword,
59 $($ident),*
60 }
61
62 pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
63 $(Keyword::$ident),*
64 ];
65
66 $(kw_def!($ident $(= $string_keyword)?);)*
67 pub const ALL_KEYWORDS: &[&str] = &[
68 $($ident),*
69 ];
70 };
71}
72
73define_keywords!(
75 ABORT,
76 ABS,
77 ABSOLUTE,
78 ACCESS,
79 ACTION,
80 ADD,
81 ADMIN,
82 AFTER,
83 AGAINST,
84 AGGREGATION,
85 ALIAS,
86 ALL,
87 ALLOCATE,
88 ALTER,
89 ALWAYS,
90 ANALYZE,
91 AND,
92 ANTI,
93 ANY,
94 APPLY,
95 ARCHIVE,
96 ARE,
97 ARRAY,
98 ARRAY_MAX_CARDINALITY,
99 AS,
100 ASC,
101 ASENSITIVE,
102 ASOF,
103 ASSERT,
104 ASYMMETRIC,
105 AT,
106 ATOMIC,
107 ATTACH,
108 AUTHORIZATION,
109 AUTO,
110 AUTOINCREMENT,
111 AUTO_INCREMENT,
112 AVG,
113 AVRO,
114 BACKWARD,
115 BASE64,
116 BEFORE,
117 BEGIN,
118 BEGIN_FRAME,
119 BEGIN_PARTITION,
120 BETWEEN,
121 BIGDECIMAL,
122 BIGINT,
123 BIGNUMERIC,
124 BINARY,
125 BINDING,
126 BLOB,
127 BLOOMFILTER,
128 BOOL,
129 BOOLEAN,
130 BOTH,
131 BROWSE,
132 BTREE,
133 BUCKETS,
134 BY,
135 BYPASSRLS,
136 BYTEA,
137 BYTES,
138 CACHE,
139 CALL,
140 CALLED,
141 CARDINALITY,
142 CASCADE,
143 CASCADED,
144 CASE,
145 CAST,
146 CATALOG,
147 CEIL,
148 CEILING,
149 CENTURY,
150 CHAIN,
151 CHANGE,
152 CHANGE_TRACKING,
153 CHANNEL,
154 CHAR,
155 CHARACTER,
156 CHARACTERS,
157 CHARACTER_LENGTH,
158 CHARSET,
159 CHAR_LENGTH,
160 CHECK,
161 CLEAR,
162 CLOB,
163 CLONE,
164 CLOSE,
165 CLUSTER,
166 CLUSTERED,
167 COALESCE,
168 COLLATE,
169 COLLATION,
170 COLLECT,
171 COLLECTION,
172 COLUMN,
173 COLUMNS,
174 COLUMNSTORE,
175 COMMENT,
176 COMMIT,
177 COMMITTED,
178 COMPRESSION,
179 COMPUTE,
180 CONCURRENTLY,
181 CONDITION,
182 CONFLICT,
183 CONNECT,
184 CONNECTION,
185 CONSTRAINT,
186 CONTAINS,
187 CONTINUE,
188 CONVERT,
189 COPY,
190 COPY_OPTIONS,
191 CORR,
192 CORRESPONDING,
193 COUNT,
194 COVAR_POP,
195 COVAR_SAMP,
196 CREATE,
197 CREATEDB,
198 CREATEROLE,
199 CREDENTIALS,
200 CROSS,
201 CSV,
202 CUBE,
203 CUME_DIST,
204 CURRENT,
205 CURRENT_CATALOG,
206 CURRENT_DATE,
207 CURRENT_DEFAULT_TRANSFORM_GROUP,
208 CURRENT_PATH,
209 CURRENT_ROLE,
210 CURRENT_ROW,
211 CURRENT_SCHEMA,
212 CURRENT_TIME,
213 CURRENT_TIMESTAMP,
214 CURRENT_TRANSFORM_GROUP_FOR_TYPE,
215 CURRENT_USER,
216 CURSOR,
217 CYCLE,
218 DATA,
219 DATABASE,
220 DATABASES,
221 DATA_RETENTION_TIME_IN_DAYS,
222 DATE,
223 DATE32,
224 DATETIME,
225 DATETIME64,
226 DAY,
227 DAYOFWEEK,
228 DAYOFYEAR,
229 DEALLOCATE,
230 DEC,
231 DECADE,
232 DECIMAL,
233 DECLARE,
234 DEDUPLICATE,
235 DEFAULT,
236 DEFAULT_DDL_COLLATION,
237 DEFERRABLE,
238 DEFERRED,
239 DEFINE,
240 DEFINED,
241 DELAYED,
242 DELETE,
243 DELIMITED,
244 DELIMITER,
245 DELTA,
246 DENSE_RANK,
247 DEREF,
248 DESC,
249 DESCRIBE,
250 DETACH,
251 DETAIL,
252 DETERMINISTIC,
253 DIRECTORY,
254 DISABLE,
255 DISCARD,
256 DISCONNECT,
257 DISTINCT,
258 DISTRIBUTE,
259 DIV,
260 DO,
261 DOUBLE,
262 DOW,
263 DOY,
264 DROP,
265 DRY,
266 DUPLICATE,
267 DYNAMIC,
268 EACH,
269 ELEMENT,
270 ELEMENTS,
271 ELSE,
272 EMPTY,
273 ENABLE,
274 ENABLE_SCHEMA_EVOLUTION,
275 ENCODING,
276 ENCRYPTION,
277 END,
278 END_EXEC = "END-EXEC",
279 ENDPOINT,
280 END_FRAME,
281 END_PARTITION,
282 ENFORCED,
283 ENGINE,
284 ENUM,
285 EPHEMERAL,
286 EPOCH,
287 EQUALS,
288 ERROR,
289 ESCAPE,
290 ESCAPED,
291 EVENT,
292 EVERY,
293 EXCEPT,
294 EXCEPTION,
295 EXCLUDE,
296 EXCLUSIVE,
297 EXEC,
298 EXECUTE,
299 EXISTS,
300 EXP,
301 EXPANSION,
302 EXPLAIN,
303 EXPLICIT,
304 EXPORT,
305 EXTENDED,
306 EXTENSION,
307 EXTERNAL,
308 EXTRACT,
309 FAIL,
310 FALSE,
311 FETCH,
312 FIELDS,
313 FILE,
314 FILES,
315 FILE_FORMAT,
316 FILL,
317 FILTER,
318 FINAL,
319 FIRST,
320 FIRST_VALUE,
321 FIXEDSTRING,
322 FLOAT,
323 FLOAT32,
324 FLOAT4,
325 FLOAT64,
326 FLOAT8,
327 FLOOR,
328 FLUSH,
329 FOLLOWING,
330 FOR,
331 FORCE,
332 FORCE_NOT_NULL,
333 FORCE_NULL,
334 FORCE_QUOTE,
335 FOREIGN,
336 FORMAT,
337 FORMATTED,
338 FORWARD,
339 FRAME_ROW,
340 FREE,
341 FREEZE,
342 FROM,
343 FSCK,
344 FULL,
345 FULLTEXT,
346 FUNCTION,
347 FUNCTIONS,
348 FUSION,
349 GENERAL,
350 GENERATE,
351 GENERATED,
352 GEOGRAPHY,
353 GET,
354 GLOBAL,
355 GRANT,
356 GRANTED,
357 GRANTS,
358 GRAPHVIZ,
359 GROUP,
360 GROUPING,
361 GROUPS,
362 HASH,
363 HAVING,
364 HEADER,
365 HEAP,
366 HIGH_PRIORITY,
367 HISTORY,
368 HIVEVAR,
369 HOLD,
370 HOSTS,
371 HOUR,
372 HOURS,
373 ID,
374 IDENTITY,
375 IF,
376 IGNORE,
377 ILIKE,
378 IMMEDIATE,
379 IMMUTABLE,
380 IN,
381 INCLUDE,
382 INCLUDE_NULL_VALUES,
383 INCREMENT,
384 INDEX,
385 INDICATOR,
386 INHERIT,
387 INITIALLY,
388 INNER,
389 INOUT,
390 INPUT,
391 INPUTFORMAT,
392 INSENSITIVE,
393 INSERT,
394 INSTALL,
395 INSTEAD,
396 INT,
397 INT128,
398 INT16,
399 INT2,
400 INT256,
401 INT32,
402 INT4,
403 INT64,
404 INT8,
405 INTEGER,
406 INTERPOLATE,
407 INTERSECT,
408 INTERSECTION,
409 INTERVAL,
410 INTO,
411 IS,
412 ISODOW,
413 ISOLATION,
414 ISOWEEK,
415 ISOYEAR,
416 ITEMS,
417 JAR,
418 JOIN,
419 JSON,
420 JSONB,
421 JSONFILE,
422 JSON_TABLE,
423 JULIAN,
424 KEY,
425 KEYS,
426 KILL,
427 LAG,
428 LANGUAGE,
429 LARGE,
430 LAST,
431 LAST_VALUE,
432 LATERAL,
433 LEAD,
434 LEADING,
435 LEFT,
436 LEVEL,
437 LIKE,
438 LIKE_REGEX,
439 LIMIT,
440 LINES,
441 LISTEN,
442 LN,
443 LOAD,
444 LOCAL,
445 LOCALTIME,
446 LOCALTIMESTAMP,
447 LOCATION,
448 LOCK,
449 LOCKED,
450 LOGIN,
451 LOGS,
452 LOWCARDINALITY,
453 LOWER,
454 LOW_PRIORITY,
455 MACRO,
456 MANAGEDLOCATION,
457 MAP,
458 MASKING,
459 MATCH,
460 MATCHED,
461 MATCHES,
462 MATCH_CONDITION,
463 MATCH_RECOGNIZE,
464 MATERIALIZE,
465 MATERIALIZED,
466 MAX,
467 MAXVALUE,
468 MAX_DATA_EXTENSION_TIME_IN_DAYS,
469 MEASURES,
470 MEDIUMINT,
471 MEMBER,
472 MERGE,
473 METADATA,
474 METHOD,
475 MICROSECOND,
476 MICROSECONDS,
477 MILLENIUM,
478 MILLENNIUM,
479 MILLISECOND,
480 MILLISECONDS,
481 MIN,
482 MINUTE,
483 MINVALUE,
484 MOD,
485 MODE,
486 MODIFIES,
487 MODIFY,
488 MODULE,
489 MONTH,
490 MSCK,
491 MULTISET,
492 MUTATION,
493 NAME,
494 NANOSECOND,
495 NANOSECONDS,
496 NATIONAL,
497 NATURAL,
498 NCHAR,
499 NCLOB,
500 NESTED,
501 NEW,
502 NEXT,
503 NO,
504 NOBYPASSRLS,
505 NOCREATEDB,
506 NOCREATEROLE,
507 NOINHERIT,
508 NOLOGIN,
509 NONE,
510 NOORDER,
511 NOREPLICATION,
512 NORMALIZE,
513 NOSCAN,
514 NOSUPERUSER,
515 NOT,
516 NOTHING,
517 NOTIFY,
518 NOWAIT,
519 NO_WRITE_TO_BINLOG,
520 NTH_VALUE,
521 NTILE,
522 NULL,
523 NULLABLE,
524 NULLIF,
525 NULLS,
526 NUMERIC,
527 NVARCHAR,
528 OBJECT,
529 OCCURRENCES_REGEX,
530 OCTETS,
531 OCTET_LENGTH,
532 OF,
533 OFFSET,
534 OLD,
535 OMIT,
536 ON,
537 ONE,
538 ONLY,
539 OPEN,
540 OPERATOR,
541 OPTIMIZE,
542 OPTIMIZER_COSTS,
543 OPTION,
544 OPTIONS,
545 OR,
546 ORC,
547 ORDER,
548 ORDINALITY,
549 OUT,
550 OUTER,
551 OUTPUTFORMAT,
552 OVER,
553 OVERFLOW,
554 OVERLAPS,
555 OVERLAY,
556 OVERWRITE,
557 OWNED,
558 OWNER,
559 PARALLEL,
560 PARAMETER,
561 PARQUET,
562 PART,
563 PARTITION,
564 PARTITIONED,
565 PARTITIONS,
566 PASSWORD,
567 PAST,
568 PATH,
569 PATTERN,
570 PER,
571 PERCENT,
572 PERCENTILE_CONT,
573 PERCENTILE_DISC,
574 PERCENT_RANK,
575 PERIOD,
576 PERMISSIVE,
577 PERSISTENT,
578 PIVOT,
579 PLACING,
580 PLAN,
581 PLANS,
582 POLICY,
583 PORTION,
584 POSITION,
585 POSITION_REGEX,
586 POWER,
587 PRAGMA,
588 PRECEDES,
589 PRECEDING,
590 PRECISION,
591 PREPARE,
592 PRESERVE,
593 PREWHERE,
594 PRIMARY,
595 PRIOR,
596 PRIVILEGES,
597 PROCEDURE,
598 PROGRAM,
599 PROJECTION,
600 PURGE,
601 QUALIFY,
602 QUARTER,
603 QUERY,
604 QUOTE,
605 RANGE,
606 RANK,
607 RAW,
608 RCFILE,
609 READ,
610 READS,
611 READ_ONLY,
612 REAL,
613 RECURSIVE,
614 REF,
615 REFERENCES,
616 REFERENCING,
617 REGCLASS,
618 REGEXP,
619 REGR_AVGX,
620 REGR_AVGY,
621 REGR_COUNT,
622 REGR_INTERCEPT,
623 REGR_R2,
624 REGR_SLOPE,
625 REGR_SXX,
626 REGR_SXY,
627 REGR_SYY,
628 RELATIVE,
629 RELAY,
630 RELEASE,
631 REMOTE,
632 RENAME,
633 REORG,
634 REPAIR,
635 REPEATABLE,
636 REPLACE,
637 REPLICA,
638 REPLICATION,
639 RESET,
640 RESPECT,
641 RESTART,
642 RESTRICT,
643 RESTRICTED,
644 RESTRICTIVE,
645 RESULT,
646 RESULTSET,
647 RETAIN,
648 RETURN,
649 RETURNING,
650 RETURNS,
651 REVOKE,
652 RIGHT,
653 RLIKE,
654 ROLE,
655 ROLLBACK,
656 ROLLUP,
657 ROOT,
658 ROW,
659 ROWID,
660 ROWS,
661 ROW_NUMBER,
662 RULE,
663 RUN,
664 SAFE,
665 SAFE_CAST,
666 SAVEPOINT,
667 SCHEMA,
668 SCHEMAS,
669 SCOPE,
670 SCROLL,
671 SEARCH,
672 SECOND,
673 SECRET,
674 SECURITY,
675 SELECT,
676 SEMI,
677 SENSITIVE,
678 SEPARATOR,
679 SEQUENCE,
680 SEQUENCEFILE,
681 SEQUENCES,
682 SERDE,
683 SERDEPROPERTIES,
684 SERIALIZABLE,
685 SESSION,
686 SESSION_USER,
687 SET,
688 SETS,
689 SETTINGS,
690 SHARE,
691 SHOW,
692 SIMILAR,
693 SKIP,
694 SLOW,
695 SMALLINT,
696 SNAPSHOT,
697 SOME,
698 SORT,
699 SORTED,
700 SOURCE,
701 SPATIAL,
702 SPECIFIC,
703 SPECIFICTYPE,
704 SQL,
705 SQLEXCEPTION,
706 SQLSTATE,
707 SQLWARNING,
708 SQRT,
709 STABLE,
710 STAGE,
711 START,
712 STATEMENT,
713 STATIC,
714 STATISTICS,
715 STATUS,
716 STDDEV_POP,
717 STDDEV_SAMP,
718 STDIN,
719 STDOUT,
720 STEP,
721 STORAGE_INTEGRATION,
722 STORED,
723 STRICT,
724 STRING,
725 STRUCT,
726 SUBMULTISET,
727 SUBSTRING,
728 SUBSTRING_REGEX,
729 SUCCEEDS,
730 SUM,
731 SUPER,
732 SUPERUSER,
733 SWAP,
734 SYMMETRIC,
735 SYNC,
736 SYSTEM,
737 SYSTEM_TIME,
738 SYSTEM_USER,
739 TABLE,
740 TABLES,
741 TABLESAMPLE,
742 TAG,
743 TARGET,
744 TBLPROPERTIES,
745 TEMP,
746 TEMPORARY,
747 TERMINATED,
748 TEXT,
749 TEXTFILE,
750 THEN,
751 TIES,
752 TIME,
753 TIMESTAMP,
754 TIMESTAMPTZ,
755 TIMETZ,
756 TIMEZONE,
757 TIMEZONE_ABBR,
758 TIMEZONE_HOUR,
759 TIMEZONE_MINUTE,
760 TIMEZONE_REGION,
761 TINYINT,
762 TO,
763 TOP,
764 TOTALS,
765 TRAILING,
766 TRANSACTION,
767 TRANSIENT,
768 TRANSLATE,
769 TRANSLATE_REGEX,
770 TRANSLATION,
771 TREAT,
772 TRIGGER,
773 TRIM,
774 TRIM_ARRAY,
775 TRUE,
776 TRUNCATE,
777 TRY_CAST,
778 TRY_CONVERT,
779 TUPLE,
780 TYPE,
781 UESCAPE,
782 UINT128,
783 UINT16,
784 UINT256,
785 UINT32,
786 UINT64,
787 UINT8,
788 UNBOUNDED,
789 UNCACHE,
790 UNCOMMITTED,
791 UNFREEZE,
792 UNION,
793 UNIQUE,
794 UNKNOWN,
795 UNLOAD,
796 UNLOCK,
797 UNLOGGED,
798 UNMATCHED,
799 UNNEST,
800 UNPIVOT,
801 UNSAFE,
802 UNSIGNED,
803 UNTIL,
804 UPDATE,
805 UPPER,
806 URL,
807 USAGE,
808 USE,
809 USER,
810 USER_RESOURCES,
811 USING,
812 UUID,
813 VACUUM,
814 VALID,
815 VALIDATION_MODE,
816 VALUE,
817 VALUES,
818 VALUE_OF,
819 VARBINARY,
820 VARCHAR,
821 VARIABLES,
822 VARYING,
823 VAR_POP,
824 VAR_SAMP,
825 VERBOSE,
826 VERSION,
827 VERSIONING,
828 VIEW,
829 VIEWS,
830 VIRTUAL,
831 VOLATILE,
832 WAREHOUSE,
833 WEEK,
834 WHEN,
835 WHENEVER,
836 WHERE,
837 WIDTH_BUCKET,
838 WINDOW,
839 WITH,
840 WITHIN,
841 WITHOUT,
842 WITHOUT_ARRAY_WRAPPER,
843 WORK,
844 WRITE,
845 XML,
846 XOR,
847 YEAR,
848 ZONE,
849 ZORDER
850);
851
852pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
855 Keyword::WITH,
857 Keyword::EXPLAIN,
858 Keyword::ANALYZE,
859 Keyword::SELECT,
860 Keyword::WHERE,
861 Keyword::GROUP,
862 Keyword::SORT,
863 Keyword::HAVING,
864 Keyword::ORDER,
865 Keyword::PIVOT,
866 Keyword::UNPIVOT,
867 Keyword::TOP,
868 Keyword::LATERAL,
869 Keyword::VIEW,
870 Keyword::LIMIT,
871 Keyword::OFFSET,
872 Keyword::FETCH,
873 Keyword::UNION,
874 Keyword::EXCEPT,
875 Keyword::INTERSECT,
876 Keyword::ON,
878 Keyword::JOIN,
879 Keyword::INNER,
880 Keyword::CROSS,
881 Keyword::FULL,
882 Keyword::LEFT,
883 Keyword::RIGHT,
884 Keyword::NATURAL,
885 Keyword::USING,
886 Keyword::CLUSTER,
887 Keyword::DISTRIBUTE,
888 Keyword::GLOBAL,
889 Keyword::OUTER,
891 Keyword::SET,
892 Keyword::QUALIFY,
893 Keyword::WINDOW,
894 Keyword::END,
895 Keyword::FOR,
896 Keyword::PARTITION,
898 Keyword::PREWHERE,
900 Keyword::SETTINGS,
902 Keyword::FORMAT,
904 Keyword::START,
906 Keyword::CONNECT,
907 Keyword::MATCH_RECOGNIZE,
909];
910
911pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
914 Keyword::WITH,
916 Keyword::EXPLAIN,
917 Keyword::ANALYZE,
918 Keyword::SELECT,
919 Keyword::WHERE,
920 Keyword::GROUP,
921 Keyword::SORT,
922 Keyword::HAVING,
923 Keyword::ORDER,
924 Keyword::TOP,
925 Keyword::LATERAL,
926 Keyword::VIEW,
927 Keyword::LIMIT,
928 Keyword::OFFSET,
929 Keyword::FETCH,
930 Keyword::UNION,
931 Keyword::EXCEPT,
932 Keyword::INTERSECT,
933 Keyword::CLUSTER,
934 Keyword::DISTRIBUTE,
935 Keyword::RETURNING,
936 Keyword::FROM,
938 Keyword::INTO,
939 Keyword::END,
940];