sqlparser/
keywords.rs

1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements.  See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.  The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License.  You may obtain a copy of the License at
8//
9//   http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied.  See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18//! This module defines:
19//! 1) a list of constants for every keyword
20//! 2) an `ALL_KEYWORDS` array with every keyword in it
21//!    This is not a list of *reserved* keywords: some of these can be
22//!    parsed as identifiers if the parser decides so. This means that
23//!    new keywords can be added here without affecting the parse result.
24//!
25//!    As a matter of fact, most of these keywords are not used at all
26//!    and could be removed.
27//! 3) a `RESERVED_FOR_TABLE_ALIAS` array with keywords reserved in a
28//!    "table alias" context.
29
30#[cfg(feature = "serde")]
31use serde::{Deserialize, Serialize};
32
33#[cfg(feature = "visitor")]
34use sqlparser_derive::{Visit, VisitMut};
35
36/// Defines a string constant for a single keyword: `kw_def!(SELECT);`
37/// expands to `pub const SELECT = "SELECT";`
38macro_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
47/// Expands to a list of `kw_def!()` invocations for each keyword
48/// and defines an ALL_KEYWORDS array of the defined constants.
49macro_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        impl core::fmt::Display for Keyword {
72            fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
73                match self {
74                    Keyword::NoKeyword => write!(f, "NoKeyword"),
75                    $(Keyword::$ident => write!(f, "{}", $ident),)*
76                }
77            }
78        }
79    };
80}
81
82// The following keywords should be sorted to be able to match using binary search
83define_keywords!(
84    ABORT,
85    ABS,
86    ABSENT,
87    ABSOLUTE,
88    ACCEPTANYDATE,
89    ACCEPTINVCHARS,
90    ACCESS,
91    ACCOUNT,
92    ACTION,
93    ADD,
94    ADDQUOTES,
95    ADMIN,
96    AFTER,
97    AGAINST,
98    AGGREGATE,
99    AGGREGATION,
100    ALERT,
101    ALGORITHM,
102    ALIAS,
103    ALIGNMENT,
104    ALL,
105    ALLOCATE,
106    ALLOWOVERWRITE,
107    ALTER,
108    ALWAYS,
109    ANALYZE,
110    AND,
111    ANTI,
112    ANY,
113    APPLICATION,
114    APPLY,
115    APPLYBUDGET,
116    ARCHIVE,
117    ARE,
118    ARRAY,
119    ARRAY_MAX_CARDINALITY,
120    AS,
121    ASC,
122    ASENSITIVE,
123    ASOF,
124    ASSERT,
125    ASYMMETRIC,
126    AT,
127    ATOMIC,
128    ATTACH,
129    AUDIT,
130    AUTHENTICATION,
131    AUTHORIZATION,
132    AUTHORIZATIONS,
133    AUTO,
134    AUTOEXTEND_SIZE,
135    AUTOINCREMENT,
136    AUTO_INCREMENT,
137    AVG,
138    AVG_ROW_LENGTH,
139    AVRO,
140    BACKWARD,
141    BASE64,
142    BASE_LOCATION,
143    BEFORE,
144    BEGIN,
145    BEGIN_FRAME,
146    BEGIN_PARTITION,
147    BERNOULLI,
148    BETWEEN,
149    BIGDECIMAL,
150    BIGINT,
151    BIGNUMERIC,
152    BINARY,
153    BIND,
154    BINDING,
155    BIT,
156    BLANKSASNULL,
157    BLOB,
158    BLOCK,
159    BLOOM,
160    BLOOMFILTER,
161    BOOL,
162    BOOLEAN,
163    BOOST,
164    BOTH,
165    BOX,
166    BRIN,
167    BROWSE,
168    BTREE,
169    BUCKET,
170    BUCKETS,
171    BY,
172    BYPASSRLS,
173    BYTEA,
174    BYTES,
175    BZIP2,
176    CACHE,
177    CALL,
178    CALLED,
179    CANONICAL,
180    CARDINALITY,
181    CASCADE,
182    CASCADED,
183    CASE,
184    CASES,
185    CAST,
186    CATALOG,
187    CATALOG_SYNC,
188    CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER,
189    CATALOG_SYNC_NAMESPACE_MODE,
190    CATCH,
191    CATEGORY,
192    CEIL,
193    CEILING,
194    CENTURY,
195    CHAIN,
196    CHANGE,
197    CHANGE_TRACKING,
198    CHANNEL,
199    CHAR,
200    CHARACTER,
201    CHARACTERISTICS,
202    CHARACTERS,
203    CHARACTER_LENGTH,
204    CHARSET,
205    CHAR_LENGTH,
206    CHECK,
207    CHECKSUM,
208    CIRCLE,
209    CLASS,
210    CLEANPATH,
211    CLEAR,
212    CLOB,
213    CLONE,
214    CLOSE,
215    CLUSTER,
216    CLUSTERED,
217    CLUSTERING,
218    COALESCE,
219    COLLATABLE,
220    COLLATE,
221    COLLATION,
222    COLLECT,
223    COLLECTION,
224    COLUMN,
225    COLUMNS,
226    COLUMNSTORE,
227    COMMENT,
228    COMMIT,
229    COMMITTED,
230    COMMUTATOR,
231    COMPATIBLE,
232    COMPRESS,
233    COMPRESSION,
234    COMPUPDATE,
235    COMPUTE,
236    CONCURRENTLY,
237    CONDITION,
238    CONFLICT,
239    CONNECT,
240    CONNECTION,
241    CONNECTOR,
242    CONNECT_BY_ROOT,
243    CONSTRAINT,
244    CONTACT,
245    CONTAINS,
246    CONTINUE,
247    CONVERT,
248    COPY,
249    COPY_OPTIONS,
250    CORR,
251    CORRESPONDING,
252    COUNT,
253    COVAR_POP,
254    COVAR_SAMP,
255    CREATE,
256    CREATEDB,
257    CREATEROLE,
258    CREDENTIALS,
259    CROSS,
260    CSV,
261    CUBE,
262    CUME_DIST,
263    CURRENT,
264    CURRENT_CATALOG,
265    CURRENT_DATE,
266    CURRENT_DEFAULT_TRANSFORM_GROUP,
267    CURRENT_PATH,
268    CURRENT_ROLE,
269    CURRENT_ROW,
270    CURRENT_SCHEMA,
271    CURRENT_TIME,
272    CURRENT_TIMESTAMP,
273    CURRENT_TRANSFORM_GROUP_FOR_TYPE,
274    CURRENT_USER,
275    CURSOR,
276    CYCLE,
277    DATA,
278    DATABASE,
279    DATABASES,
280    DATA_RETENTION_TIME_IN_DAYS,
281    DATE,
282    DATE32,
283    DATEFORMAT,
284    DATETIME,
285    DATETIME64,
286    DAY,
287    DAYOFWEEK,
288    DAYOFYEAR,
289    DAYS,
290    DCPROPERTIES,
291    DEALLOCATE,
292    DEC,
293    DECADE,
294    DECIMAL,
295    DECLARE,
296    DEDUPLICATE,
297    DEFAULT,
298    DEFAULTS,
299    DEFAULT_DDL_COLLATION,
300    DEFAULT_MFA_METHOD,
301    DEFAULT_SECONDARY_ROLES,
302    DEFERRABLE,
303    DEFERRED,
304    DEFINE,
305    DEFINED,
306    DEFINER,
307    DELAYED,
308    DELAY_KEY_WRITE,
309    DELEGATED,
310    DELETE,
311    DELIMITED,
312    DELIMITER,
313    DELTA,
314    DENSE_RANK,
315    DENY,
316    DEREF,
317    DESC,
318    DESCRIBE,
319    DETACH,
320    DETAIL,
321    DETERMINISTIC,
322    DIMENSIONS,
323    DIRECTORY,
324    DISABLE,
325    DISCARD,
326    DISCONNECT,
327    DISTINCT,
328    DISTRIBUTE,
329    DIV,
330    DO,
331    DOMAIN,
332    DOUBLE,
333    DOW,
334    DOWNSTREAM,
335    DOY,
336    DROP,
337    DRY,
338    DUO,
339    DUPLICATE,
340    DYNAMIC,
341    EACH,
342    ELEMENT,
343    ELEMENTS,
344    ELSE,
345    ELSEIF,
346    EMPTY,
347    EMPTYASNULL,
348    ENABLE,
349    ENABLE_SCHEMA_EVOLUTION,
350    ENCODING,
351    ENCRYPTED,
352    ENCRYPTION,
353    END,
354    END_EXEC = "END-EXEC",
355    ENDPOINT,
356    END_FRAME,
357    END_PARTITION,
358    ENFORCED,
359    ENGINE,
360    ENGINE_ATTRIBUTE,
361    ENROLL,
362    ENUM,
363    ENUM16,
364    ENUM8,
365    EPHEMERAL,
366    EPOCH,
367    EQUALS,
368    ERROR,
369    ESCAPE,
370    ESCAPED,
371    ESTIMATE,
372    EVENT,
373    EVERY,
374    EVOLVE,
375    EXCEPT,
376    EXCEPTION,
377    EXCHANGE,
378    EXCLUDE,
379    EXCLUDING,
380    EXCLUSIVE,
381    EXEC,
382    EXECUTE,
383    EXECUTION,
384    EXISTS,
385    EXP,
386    EXPANSION,
387    EXPLAIN,
388    EXPLICIT,
389    EXPORT,
390    EXTEND,
391    EXTENDED,
392    EXTENSION,
393    EXTERNAL,
394    EXTERNAL_VOLUME,
395    EXTRACT,
396    FACTS,
397    FAIL,
398    FAILOVER,
399    FALSE,
400    FAMILY,
401    FETCH,
402    FIELDS,
403    FILE,
404    FILES,
405    FILE_FORMAT,
406    FILL,
407    FILTER,
408    FINAL,
409    FIRST,
410    FIRST_VALUE,
411    FIXEDSTRING,
412    FIXEDWIDTH,
413    FLATTEN,
414    FLOAT,
415    FLOAT32,
416    FLOAT4,
417    FLOAT64,
418    FLOAT8,
419    FLOOR,
420    FLUSH,
421    FN,
422    FOLLOWING,
423    FOR,
424    FORCE,
425    FORCE_NOT_NULL,
426    FORCE_NULL,
427    FORCE_QUOTE,
428    FOREIGN,
429    FORMAT,
430    FORMATTED,
431    FORWARD,
432    FRAME_ROW,
433    FREE,
434    FREEZE,
435    FROM,
436    FSCK,
437    FULFILLMENT,
438    FULL,
439    FULLTEXT,
440    FUNCTION,
441    FUNCTIONS,
442    FUSION,
443    FUTURE,
444    GB,
445    GENERAL,
446    GENERATE,
447    GENERATED,
448    GEOGRAPHY,
449    GET,
450    GIN,
451    GIST,
452    GLOBAL,
453    GRANT,
454    GRANTED,
455    GRANTS,
456    GRAPHVIZ,
457    GROUP,
458    GROUPING,
459    GROUPS,
460    GZIP,
461    HASH,
462    HASHES,
463    HAVING,
464    HEADER,
465    HEAP,
466    HIGH_PRIORITY,
467    HISTORY,
468    HIVEVAR,
469    HOLD,
470    HOSTS,
471    HOUR,
472    HOURS,
473    HUGEINT,
474    IAM_ROLE,
475    ICEBERG,
476    ID,
477    IDENTIFIED,
478    IDENTITY,
479    IDENTITY_INSERT,
480    IF,
481    IGNORE,
482    IGNOREHEADER,
483    ILIKE,
484    IMMEDIATE,
485    IMMUTABLE,
486    IMPORT,
487    IMPORTED,
488    IN,
489    INCLUDE,
490    INCLUDE_NULL_VALUES,
491    INCLUDING,
492    INCREMENT,
493    INCREMENTAL,
494    INDEX,
495    INDICATOR,
496    INHERIT,
497    INHERITS,
498    INITIALIZE,
499    INITIALLY,
500    INNER,
501    INOUT,
502    INPATH,
503    INPLACE,
504    INPUT,
505    INPUTFORMAT,
506    INSENSITIVE,
507    INSERT,
508    INSERT_METHOD,
509    INSTALL,
510    INSTANT,
511    INSTEAD,
512    INT,
513    INT128,
514    INT16,
515    INT2,
516    INT256,
517    INT32,
518    INT4,
519    INT64,
520    INT8,
521    INTEGER,
522    INTEGRATION,
523    INTERNALLENGTH,
524    INTERPOLATE,
525    INTERSECT,
526    INTERSECTION,
527    INTERVAL,
528    INTO,
529    INVISIBLE,
530    INVOKER,
531    IO,
532    IS,
533    ISODOW,
534    ISOLATION,
535    ISOWEEK,
536    ISOYEAR,
537    ITEMS,
538    JAR,
539    JOIN,
540    JSON,
541    JSONB,
542    JSONFILE,
543    JSON_TABLE,
544    JULIAN,
545    KEY,
546    KEYS,
547    KEY_BLOCK_SIZE,
548    KILL,
549    LAG,
550    LANGUAGE,
551    LARGE,
552    LAST,
553    LAST_VALUE,
554    LATERAL,
555    LEAD,
556    LEADING,
557    LEAKPROOF,
558    LEAST,
559    LEFT,
560    LEFTARG,
561    LEVEL,
562    LIKE,
563    LIKE_REGEX,
564    LIMIT,
565    LINE,
566    LINES,
567    LIST,
568    LISTEN,
569    LISTING,
570    LN,
571    LOAD,
572    LOCAL,
573    LOCALTIME,
574    LOCALTIMESTAMP,
575    LOCATION,
576    LOCK,
577    LOCKED,
578    LOG,
579    LOGIN,
580    LOGS,
581    LONG,
582    LONGBLOB,
583    LONGTEXT,
584    LOWCARDINALITY,
585    LOWER,
586    LOW_PRIORITY,
587    LS,
588    LSEG,
589    MACRO,
590    MAIN,
591    MANAGE,
592    MANAGED,
593    MANAGEDLOCATION,
594    MANIFEST,
595    MAP,
596    MASKING,
597    MATCH,
598    MATCHED,
599    MATCHES,
600    MATCH_CONDITION,
601    MATCH_RECOGNIZE,
602    MATERIALIZE,
603    MATERIALIZED,
604    MAX,
605    MAXFILESIZE,
606    MAXVALUE,
607    MAX_DATA_EXTENSION_TIME_IN_DAYS,
608    MAX_ROWS,
609    MB,
610    MEASURES,
611    MEDIUMBLOB,
612    MEDIUMINT,
613    MEDIUMTEXT,
614    MEMBER,
615    MERGE,
616    MERGES,
617    MESSAGE,
618    METADATA,
619    METHOD,
620    METRIC,
621    METRICS,
622    MFA,
623    MICROSECOND,
624    MICROSECONDS,
625    MILLENIUM,
626    MILLENNIUM,
627    MILLISECOND,
628    MILLISECONDS,
629    MIN,
630    MINUS,
631    MINUTE,
632    MINUTES,
633    MINVALUE,
634    MIN_ROWS,
635    MOD,
636    MODE,
637    MODIFIES,
638    MODIFY,
639    MODULE,
640    MODULUS,
641    MONITOR,
642    MONTH,
643    MONTHS,
644    MSCK,
645    MULTIRANGE_TYPE_NAME,
646    MULTISET,
647    MUTATION,
648    NAME,
649    NAMES,
650    NANOSECOND,
651    NANOSECONDS,
652    NATIONAL,
653    NATURAL,
654    NCHAR,
655    NCLOB,
656    NEGATOR,
657    NEST,
658    NESTED,
659    NETWORK,
660    NEW,
661    NEXT,
662    NFC,
663    NFD,
664    NFKC,
665    NFKD,
666    NO,
667    NOBYPASSRLS,
668    NOCOMPRESS,
669    NOCREATEDB,
670    NOCREATEROLE,
671    NOINHERIT,
672    NOLOGIN,
673    NONE,
674    NOORDER,
675    NOREPLICATION,
676    NORMALIZE,
677    NORMALIZED,
678    NOSCAN,
679    NOSUPERUSER,
680    NOT,
681    NOTHING,
682    NOTIFY,
683    NOTNULL,
684    NOWAIT,
685    NO_WRITE_TO_BINLOG,
686    NTH_VALUE,
687    NTILE,
688    NULL,
689    NULLABLE,
690    NULLIF,
691    NULLS,
692    NUMBER,
693    NUMERIC,
694    NVARCHAR,
695    OBJECT,
696    OBJECTS,
697    OCCURRENCES_REGEX,
698    OCTETS,
699    OCTET_LENGTH,
700    OF,
701    OFF,
702    OFFSET,
703    OFFSETS,
704    OLD,
705    OMIT,
706    ON,
707    ONE,
708    ONLY,
709    ON_CREATE,
710    ON_SCHEDULE,
711    OPEN,
712    OPENJSON,
713    OPERATE,
714    OPERATOR,
715    OPTIMIZATION,
716    OPTIMIZE,
717    OPTIMIZED,
718    OPTIMIZER_COSTS,
719    OPTION,
720    OPTIONS,
721    OR,
722    ORC,
723    ORDER,
724    ORDINALITY,
725    ORGANIZATION,
726    OTHER,
727    OTP,
728    OUT,
729    OUTER,
730    OUTPUT,
731    OUTPUTFORMAT,
732    OVER,
733    OVERFLOW,
734    OVERLAPS,
735    OVERLAY,
736    OVERRIDE,
737    OVERWRITE,
738    OWNED,
739    OWNER,
740    OWNERSHIP,
741    PACKAGE,
742    PACKAGES,
743    PACK_KEYS,
744    PARALLEL,
745    PARAMETER,
746    PARQUET,
747    PART,
748    PARTIAL,
749    PARTITION,
750    PARTITIONED,
751    PARTITIONS,
752    PASSEDBYVALUE,
753    PASSING,
754    PASSKEY,
755    PASSWORD,
756    PAST,
757    PATH,
758    PATTERN,
759    PCTFREE,
760    PER,
761    PERCENT,
762    PERCENTILE_CONT,
763    PERCENTILE_DISC,
764    PERCENT_RANK,
765    PERIOD,
766    PERMISSIVE,
767    PERSISTENT,
768    PIVOT,
769    PLACING,
770    PLAIN,
771    PLAN,
772    PLANS,
773    POINT,
774    POLICY,
775    POLYGON,
776    POOL,
777    PORTION,
778    POSITION,
779    POSITION_REGEX,
780    POWER,
781    PRAGMA,
782    PRECEDES,
783    PRECEDING,
784    PRECISION,
785    PREFERRED,
786    PREPARE,
787    PRESERVE,
788    PRESET,
789    PREWHERE,
790    PRIMARY,
791    PRINT,
792    PRIOR,
793    PRIVILEGES,
794    PROCEDURE,
795    PROFILE,
796    PROGRAM,
797    PROJECTION,
798    PUBLIC,
799    PURCHASE,
800    PURGE,
801    QUALIFY,
802    QUARTER,
803    QUERIES,
804    QUERY,
805    QUOTE,
806    RAISE,
807    RAISERROR,
808    RANGE,
809    RANK,
810    RAW,
811    RCFILE,
812    READ,
813    READS,
814    READ_ONLY,
815    REAL,
816    RECEIVE,
817    RECLUSTER,
818    RECURSIVE,
819    REF,
820    REFERENCES,
821    REFERENCING,
822    REFRESH,
823    REFRESH_MODE,
824    REGCLASS,
825    REGEXP,
826    REGION,
827    REGR_AVGX,
828    REGR_AVGY,
829    REGR_COUNT,
830    REGR_INTERCEPT,
831    REGR_R2,
832    REGR_SLOPE,
833    REGR_SXX,
834    REGR_SXY,
835    REGR_SYY,
836    REINDEX,
837    RELATIVE,
838    RELAY,
839    RELEASE,
840    RELEASES,
841    REMAINDER,
842    REMOTE,
843    REMOVE,
844    REMOVEQUOTES,
845    RENAME,
846    REORG,
847    REPAIR,
848    REPEATABLE,
849    REPLACE,
850    REPLACE_INVALID_CHARACTERS,
851    REPLICA,
852    REPLICATE,
853    REPLICATION,
854    REQUIRE,
855    RESET,
856    RESOLVE,
857    RESOURCE,
858    RESPECT,
859    RESTART,
860    RESTRICT,
861    RESTRICTED,
862    RESTRICTIONS,
863    RESTRICTIVE,
864    RESULT,
865    RESULTSET,
866    RESUME,
867    RETAIN,
868    RETURN,
869    RETURNING,
870    RETURNS,
871    REVOKE,
872    RIGHT,
873    RIGHTARG,
874    RLIKE,
875    RM,
876    ROLE,
877    ROLES,
878    ROLLBACK,
879    ROLLUP,
880    ROOT,
881    ROW,
882    ROWGROUPSIZE,
883    ROWID,
884    ROWS,
885    ROW_FORMAT,
886    ROW_NUMBER,
887    RULE,
888    RUN,
889    SAFE,
890    SAFE_CAST,
891    SAMPLE,
892    SAVEPOINT,
893    SCHEMA,
894    SCHEMAS,
895    SCOPE,
896    SCROLL,
897    SEARCH,
898    SECOND,
899    SECONDARY,
900    SECONDARY_ENGINE_ATTRIBUTE,
901    SECONDS,
902    SECRET,
903    SECURE,
904    SECURITY,
905    SEED,
906    SELECT,
907    SEMANTIC_VIEW,
908    SEMI,
909    SEND,
910    SENSITIVE,
911    SEPARATOR,
912    SEQUENCE,
913    SEQUENCEFILE,
914    SEQUENCES,
915    SERDE,
916    SERDEPROPERTIES,
917    SERIALIZABLE,
918    SERVER,
919    SERVICE,
920    SESSION,
921    SESSION_USER,
922    SET,
923    SETERROR,
924    SETS,
925    SETTINGS,
926    SHARE,
927    SHARED,
928    SHARING,
929    SHOW,
930    SIGNED,
931    SIMILAR,
932    SIMPLE,
933    SIZE,
934    SKIP,
935    SLOW,
936    SMALLINT,
937    SNAPSHOT,
938    SOME,
939    SORT,
940    SORTED,
941    SOURCE,
942    SPATIAL,
943    SPECIFIC,
944    SPECIFICTYPE,
945    SPGIST,
946    SQL,
947    SQLEXCEPTION,
948    SQLSTATE,
949    SQLWARNING,
950    SQRT,
951    SRID,
952    STABLE,
953    STAGE,
954    START,
955    STARTS,
956    STATEMENT,
957    STATIC,
958    STATISTICS,
959    STATS_AUTO_RECALC,
960    STATS_PERSISTENT,
961    STATS_SAMPLE_PAGES,
962    STATUPDATE,
963    STATUS,
964    STDDEV_POP,
965    STDDEV_SAMP,
966    STDIN,
967    STDOUT,
968    STEP,
969    STORAGE,
970    STORAGE_INTEGRATION,
971    STORAGE_SERIALIZATION_POLICY,
972    STORED,
973    STRAIGHT_JOIN,
974    STREAM,
975    STRICT,
976    STRING,
977    STRUCT,
978    SUBMULTISET,
979    SUBSCRIPT,
980    SUBSTR,
981    SUBSTRING,
982    SUBSTRING_REGEX,
983    SUBTYPE,
984    SUBTYPE_DIFF,
985    SUBTYPE_OPCLASS,
986    SUCCEEDS,
987    SUM,
988    SUPER,
989    SUPERUSER,
990    SUPPORT,
991    SUSPEND,
992    SWAP,
993    SYMMETRIC,
994    SYNC,
995    SYNONYM,
996    SYSTEM,
997    SYSTEM_TIME,
998    SYSTEM_USER,
999    TABLE,
1000    TABLES,
1001    TABLESAMPLE,
1002    TABLESPACE,
1003    TAG,
1004    TARGET,
1005    TARGET_LAG,
1006    TASK,
1007    TBLPROPERTIES,
1008    TEMP,
1009    TEMPORARY,
1010    TEMPTABLE,
1011    TERMINATED,
1012    TERSE,
1013    TEXT,
1014    TEXTFILE,
1015    THEN,
1016    TIES,
1017    TIME,
1018    TIMEFORMAT,
1019    TIMESTAMP,
1020    TIMESTAMPTZ,
1021    TIMESTAMP_NTZ,
1022    TIMETZ,
1023    TIMEZONE,
1024    TIMEZONE_ABBR,
1025    TIMEZONE_HOUR,
1026    TIMEZONE_MINUTE,
1027    TIMEZONE_REGION,
1028    TINYBLOB,
1029    TINYINT,
1030    TINYTEXT,
1031    TO,
1032    TOP,
1033    TOTALS,
1034    TOTP,
1035    TRACE,
1036    TRAILING,
1037    TRANSACTION,
1038    TRANSIENT,
1039    TRANSLATE,
1040    TRANSLATE_REGEX,
1041    TRANSLATION,
1042    TREAT,
1043    TRIGGER,
1044    TRIM,
1045    TRIM_ARRAY,
1046    TRUE,
1047    TRUNCATE,
1048    TRUNCATECOLUMNS,
1049    TRY,
1050    TRY_CAST,
1051    TRY_CONVERT,
1052    TSQUERY,
1053    TSVECTOR,
1054    TUPLE,
1055    TYPE,
1056    TYPMOD_IN,
1057    TYPMOD_OUT,
1058    UBIGINT,
1059    UESCAPE,
1060    UHUGEINT,
1061    UINT128,
1062    UINT16,
1063    UINT256,
1064    UINT32,
1065    UINT64,
1066    UINT8,
1067    UNBOUNDED,
1068    UNCACHE,
1069    UNCOMMITTED,
1070    UNDEFINED,
1071    UNFREEZE,
1072    UNION,
1073    UNIQUE,
1074    UNKNOWN,
1075    UNLISTEN,
1076    UNLOAD,
1077    UNLOCK,
1078    UNLOGGED,
1079    UNMATCHED,
1080    UNNEST,
1081    UNPIVOT,
1082    UNSAFE,
1083    UNSET,
1084    UNSIGNED,
1085    UNTIL,
1086    UPDATE,
1087    UPPER,
1088    URL,
1089    USAGE,
1090    USE,
1091    USER,
1092    USER_RESOURCES,
1093    USING,
1094    USMALLINT,
1095    UTINYINT,
1096    UUID,
1097    VACUUM,
1098    VALID,
1099    VALIDATE,
1100    VALIDATION_MODE,
1101    VALUE,
1102    VALUES,
1103    VALUE_OF,
1104    VARBINARY,
1105    VARBIT,
1106    VARCHAR,
1107    VARCHAR2,
1108    VARIABLE,
1109    VARIABLES,
1110    VARYING,
1111    VAR_POP,
1112    VAR_SAMP,
1113    VERBOSE,
1114    VERSION,
1115    VERSIONING,
1116    VERSIONS,
1117    VIEW,
1118    VIEWS,
1119    VIRTUAL,
1120    VOLATILE,
1121    VOLUME,
1122    WAREHOUSE,
1123    WAREHOUSES,
1124    WEEK,
1125    WEEKS,
1126    WHEN,
1127    WHENEVER,
1128    WHERE,
1129    WHILE,
1130    WIDTH_BUCKET,
1131    WINDOW,
1132    WITH,
1133    WITHIN,
1134    WITHOUT,
1135    WITHOUT_ARRAY_WRAPPER,
1136    WORK,
1137    WORKLOAD_IDENTITY,
1138    WRAPPER,
1139    WRITE,
1140    XML,
1141    XMLNAMESPACES,
1142    XMLTABLE,
1143    XOR,
1144    YEAR,
1145    YEARS,
1146    ZONE,
1147    ZORDER,
1148    ZSTD
1149);
1150
1151/// These keywords can't be used as a table alias, so that `FROM table_name alias`
1152/// can be parsed unambiguously without looking ahead.
1153pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
1154    // Reserved as both a table and a column alias:
1155    Keyword::WITH,
1156    Keyword::EXPLAIN,
1157    Keyword::ANALYZE,
1158    Keyword::SELECT,
1159    Keyword::WHERE,
1160    Keyword::GROUP,
1161    Keyword::SORT,
1162    Keyword::HAVING,
1163    Keyword::ORDER,
1164    Keyword::PIVOT,
1165    Keyword::UNPIVOT,
1166    Keyword::TOP,
1167    Keyword::LATERAL,
1168    Keyword::VIEW,
1169    Keyword::LIMIT,
1170    Keyword::OFFSET,
1171    Keyword::FETCH,
1172    Keyword::UNION,
1173    Keyword::EXCEPT,
1174    Keyword::INTERSECT,
1175    Keyword::MINUS,
1176    // Reserved only as a table alias in the `FROM`/`JOIN` clauses:
1177    Keyword::ON,
1178    Keyword::JOIN,
1179    Keyword::INNER,
1180    Keyword::CROSS,
1181    Keyword::FULL,
1182    Keyword::LEFT,
1183    Keyword::RIGHT,
1184    Keyword::NATURAL,
1185    Keyword::USING,
1186    Keyword::CLUSTER,
1187    Keyword::DISTRIBUTE,
1188    Keyword::GLOBAL,
1189    Keyword::ANTI,
1190    Keyword::SEMI,
1191    Keyword::RETURNING,
1192    Keyword::ASOF,
1193    Keyword::MATCH_CONDITION,
1194    // for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
1195    Keyword::OUTER,
1196    Keyword::SET,
1197    Keyword::QUALIFY,
1198    Keyword::WINDOW,
1199    Keyword::END,
1200    Keyword::FOR,
1201    // for MYSQL PARTITION SELECTION
1202    Keyword::PARTITION,
1203    // for Clickhouse PREWHERE
1204    Keyword::PREWHERE,
1205    Keyword::SETTINGS,
1206    Keyword::FORMAT,
1207    // for Snowflake START WITH .. CONNECT BY
1208    Keyword::START,
1209    Keyword::CONNECT,
1210    // Reserved for snowflake MATCH_RECOGNIZE
1211    Keyword::MATCH_RECOGNIZE,
1212    // Reserved for Snowflake table sample
1213    Keyword::SAMPLE,
1214    Keyword::TABLESAMPLE,
1215    Keyword::FROM,
1216    Keyword::OPEN,
1217];
1218
1219/// Can't be used as a column alias, so that `SELECT <expr> alias`
1220/// can be parsed unambiguously without looking ahead.
1221pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
1222    // Reserved as both a table and a column alias:
1223    Keyword::WITH,
1224    Keyword::EXPLAIN,
1225    Keyword::ANALYZE,
1226    Keyword::SELECT,
1227    Keyword::WHERE,
1228    Keyword::GROUP,
1229    Keyword::SORT,
1230    Keyword::HAVING,
1231    Keyword::ORDER,
1232    Keyword::TOP,
1233    Keyword::LATERAL,
1234    Keyword::VIEW,
1235    Keyword::LIMIT,
1236    Keyword::OFFSET,
1237    Keyword::FETCH,
1238    Keyword::UNION,
1239    Keyword::EXCEPT,
1240    Keyword::EXCLUDE,
1241    Keyword::INTERSECT,
1242    Keyword::MINUS,
1243    Keyword::CLUSTER,
1244    Keyword::DISTRIBUTE,
1245    Keyword::RETURNING,
1246    // Reserved only as a column alias in the `SELECT` clause
1247    Keyword::FROM,
1248    Keyword::INTO,
1249    Keyword::END,
1250];
1251
1252// Global list of reserved keywords allowed after FROM.
1253// Parser should call Dialect::get_reserved_keyword_after_from
1254// to allow for each dialect to customize the list.
1255pub const RESERVED_FOR_TABLE_FACTOR: &[Keyword] = &[
1256    Keyword::INTO,
1257    Keyword::LIMIT,
1258    Keyword::HAVING,
1259    Keyword::WHERE,
1260];
1261
1262/// Global list of reserved keywords that cannot be parsed as identifiers
1263/// without special handling like quoting. Parser should call `Dialect::is_reserved_for_identifier`
1264/// to allow for each dialect to customize the list.
1265pub const RESERVED_FOR_IDENTIFIER: &[Keyword] = &[
1266    Keyword::EXISTS,
1267    Keyword::INTERVAL,
1268    Keyword::STRUCT,
1269    Keyword::TRIM,
1270];