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