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