Skip to main content

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