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    FINALIZE,
433    FIRST,
434    FIRST_VALUE,
435    FIXEDSTRING,
436    FIXEDWIDTH,
437    FLATTEN,
438    FLOAT,
439    FLOAT32,
440    FLOAT4,
441    FLOAT64,
442    FLOAT8,
443    FLOOR,
444    FLUSH,
445    FN,
446    FOLLOWING,
447    FOR,
448    FORCE,
449    FORCE_NOT_NULL,
450    FORCE_NULL,
451    FORCE_QUOTE,
452    FOREIGN,
453    FORMAT,
454    FORMATTED,
455    FORWARD,
456    FRAME_ROW,
457    FREE,
458    FREEZE,
459    FROM,
460    FSCK,
461    FULFILLMENT,
462    FULL,
463    FULLTEXT,
464    FUNCTION,
465    FUNCTIONS,
466    FUSION,
467    FUTURE,
468    GB,
469    GENERAL,
470    GENERATE,
471    GENERATED,
472    GEOGRAPHY,
473    GET,
474    GIN,
475    GIST,
476    GLOBAL,
477    GRANT,
478    GRANTED,
479    GRANTS,
480    GRAPHVIZ,
481    GROUP,
482    GROUPING,
483    GROUPS,
484    GZIP,
485    HANDLER,
486    HASH,
487    HASHES,
488    HAVING,
489    HEADER,
490    HEAP,
491    HIGH_PRIORITY,
492    HISTORY,
493    HIVEVAR,
494    HOLD,
495    HOSTS,
496    HOUR,
497    HOURS,
498    HUGEINT,
499    IAM_ROLE,
500    ICEBERG,
501    ID,
502    IDENTIFIED,
503    IDENTITY,
504    IDENTITY_INSERT,
505    IF,
506    IGNORE,
507    IGNOREHEADER,
508    ILIKE,
509    IMMEDIATE,
510    IMMUTABLE,
511    IMPLICIT,
512    IMPORT,
513    IMPORTED,
514    IN,
515    INCLUDE,
516    INCLUDE_NULL_VALUES,
517    INLINE,
518    INCLUDING,
519    INCREMENT,
520    INCREMENTAL,
521    INDEX,
522    INDICATOR,
523    INHERIT,
524    INHERITS,
525    INITIALIZE,
526    INITIALLY,
527    INNER,
528    INOUT,
529    INPATH,
530    INPLACE,
531    INPUT,
532    INPUTFORMAT,
533    INSENSITIVE,
534    INSERT,
535    INSERT_METHOD,
536    INSTALL,
537    INSTANT,
538    INSTEAD,
539    INT,
540    INT128,
541    INT16,
542    INT2,
543    INT256,
544    INT32,
545    INT4,
546    INT64,
547    INT8,
548    INTEGER,
549    INTEGRATION,
550    INTERNALLENGTH,
551    INTERPOLATE,
552    INTERSECT,
553    INTERSECTION,
554    INTERVAL,
555    INTO,
556    INVISIBLE,
557    INVOKER,
558    IO,
559    IS,
560    ISODOW,
561    ISOLATION,
562    ISOWEEK,
563    ISOYEAR,
564    ITEMS,
565    JAR,
566    JOIN,
567    JSON,
568    JSONB,
569    JSONFILE,
570    JSON_TABLE,
571    JULIAN,
572    KEY,
573    KEYS,
574    KEY_BLOCK_SIZE,
575    KILL,
576    LABEL,
577    LAG,
578    LAMBDA,
579    LANGUAGE,
580    LARGE,
581    LAST,
582    LAST_VALUE,
583    LATERAL,
584    LEAD,
585    LEADING,
586    LEAKPROOF,
587    LEAST,
588    LEFT,
589    LEFTARG,
590    LEVEL,
591    LIFECYCLE,
592    LIKE,
593    LIKE_REGEX,
594    LIMIT,
595    LINE,
596    LINES,
597    LIST,
598    LISTEN,
599    LISTING,
600    LN,
601    LOAD,
602    LOCAL,
603    LOCALTIME,
604    LOCALTIMESTAMP,
605    LOCATION,
606    LOCK,
607    LOCKED,
608    LOG,
609    LOGIN,
610    LOGS,
611    LONG,
612    LONGBLOB,
613    LONGTEXT,
614    LOWCARDINALITY,
615    LOWER,
616    LOW_PRIORITY,
617    LS,
618    LSEG,
619    MACRO,
620    MAIN,
621    MANAGE,
622    MANAGED,
623    MANAGEDLOCATION,
624    MANIFEST,
625    MAP,
626    MAPPING,
627    MASKING,
628    MATCH,
629    MATCHED,
630    MATCHES,
631    MATCH_CONDITION,
632    MATCH_RECOGNIZE,
633    MATERIALIZE,
634    MATERIALIZED,
635    MAX,
636    MAXFILESIZE,
637    MAXVALUE,
638    MAX_DATA_EXTENSION_TIME_IN_DAYS,
639    MAX_ROWS,
640    MB,
641    MEASURES,
642    MEDIUMBLOB,
643    MEDIUMINT,
644    MEDIUMTEXT,
645    MEMBER,
646    MERGE,
647    MERGES,
648    MESSAGE,
649    METADATA,
650    METHOD,
651    METRIC,
652    METRICS,
653    MFA,
654    MICROSECOND,
655    MICROSECONDS,
656    MILLENIUM,
657    MILLENNIUM,
658    MILLISECOND,
659    MILLISECONDS,
660    MIN,
661    MINUS,
662    MINUTE,
663    MINUTES,
664    MINVALUE,
665    MIN_ROWS,
666    MOD,
667    MODE,
668    MODIFIES,
669    MODIFY,
670    MODULE,
671    MODULUS,
672    MONITOR,
673    MONTH,
674    MONTHS,
675    MSCK,
676    MULTIRANGE_TYPE_NAME,
677    MULTISET,
678    MUTATION,
679    NAME,
680    NAMES,
681    NANOSECOND,
682    NANOSECONDS,
683    NATIONAL,
684    NATURAL,
685    NCHAR,
686    NCLOB,
687    NEGATOR,
688    NEST,
689    NESTED,
690    NETWORK,
691    NEW,
692    NEXT,
693    NFC,
694    NFD,
695    NFKC,
696    NFKD,
697    NO,
698    NOBYPASSRLS,
699    NOCOMPRESS,
700    NOCREATEDB,
701    NOCREATEROLE,
702    NOCYCLE,
703    NOINHERIT,
704    NOLOGIN,
705    NONE,
706    NOORDER,
707    NOREPLICATION,
708    NORMALIZE,
709    NORMALIZED,
710    NOSCAN,
711    NOSUPERUSER,
712    NOT,
713    NOTHING,
714    NOTIFY,
715    NOTNULL,
716    NOWAIT,
717    NO_WRITE_TO_BINLOG,
718    NTH_VALUE,
719    NTILE,
720    NULL,
721    NULLABLE,
722    NULLIF,
723    NULLS,
724    NUMBER,
725    NUMERIC,
726    NVARCHAR,
727    OBJECT,
728    OBJECTS,
729    OCCURRENCES_REGEX,
730    OCTETS,
731    OCTET_LENGTH,
732    OF,
733    OFF,
734    OFFSET,
735    OFFSETS,
736    OLD,
737    OMIT,
738    ON,
739    ONE,
740    ONLY,
741    ON_CREATE,
742    ON_SCHEDULE,
743    OPEN,
744    OPENJSON,
745    OPERATE,
746    OPERATOR,
747    OPTIMIZATION,
748    OPTIMIZE,
749    OPTIMIZED,
750    OPTIMIZER_COSTS,
751    OPTION,
752    OPTIONS,
753    OR,
754    ORC,
755    ORDER,
756    ORDINALITY,
757    ORGANIZATION,
758    OTHER,
759    OTP,
760    OUT,
761    OUTER,
762    OUTPUT,
763    OUTPUTFORMAT,
764    OVER,
765    OVERFLOW,
766    OVERLAPS,
767    OVERLAY,
768    OVERRIDE,
769    OVERWRITE,
770    OWNED,
771    OWNER,
772    OWNERSHIP,
773    PACKAGE,
774    PACKAGES,
775    PACK_KEYS,
776    PARALLEL,
777    PARAMETER,
778    PARQUET,
779    PARSER,
780    PART,
781    PARTIAL,
782    PARTITION,
783    PARTITIONED,
784    PARTITIONS,
785    PASSEDBYVALUE,
786    PASSING,
787    PASSKEY,
788    PASSWORD,
789    PAST,
790    PATH,
791    PATTERN,
792    PCTFREE,
793    PER,
794    PERCENT,
795    PERCENTILE_CONT,
796    PERCENTILE_DISC,
797    PERCENT_RANK,
798    PERIOD,
799    PERMISSIVE,
800    PERSISTENT,
801    PIVOT,
802    PLACING,
803    PLAIN,
804    PLAN,
805    PLANS,
806    POINT,
807    POLICY,
808    POLYGON,
809    POOL,
810    PORTION,
811    POSITION,
812    POSITION_REGEX,
813    POWER,
814    PRAGMA,
815    PRECEDES,
816    PRECEDING,
817    PRECISION,
818    PREFERRED,
819    PREPARE,
820    PRESERVE,
821    PRESET,
822    PREWHERE,
823    PRIMARY,
824    PRINT,
825    PRIOR,
826    PRIVILEGES,
827    PROCEDURAL,
828    PROCEDURE,
829    PROCESSLIST,
830    PROFILE,
831    PROGRAM,
832    PROJECTION,
833    PUBLIC,
834    PUBLICATION,
835    PURCHASE,
836    PURGE,
837    QUALIFY,
838    QUARTER,
839    QUERIES,
840    QUERY,
841    QUOTE,
842    RAISE,
843    RAISERROR,
844    RANGE,
845    RANK,
846    RAW,
847    RCFILE,
848    READ,
849    READS,
850    READ_ONLY,
851    REAL,
852    RECEIVE,
853    RECLUSTER,
854    RECURSIVE,
855    REF,
856    REFERENCES,
857    REFERENCING,
858    REFRESH,
859    REFRESH_MODE,
860    REGCLASS,
861    REGEXP,
862    REGION,
863    REGR_AVGX,
864    REGR_AVGY,
865    REGR_COUNT,
866    REGR_INTERCEPT,
867    REGR_R2,
868    REGR_SLOPE,
869    REGR_SXX,
870    REGR_SXY,
871    REGR_SYY,
872    REINDEX,
873    RELATIVE,
874    RELAY,
875    RELEASE,
876    RELEASES,
877    REMAINDER,
878    REMOTE,
879    REMOVE,
880    REMOVEQUOTES,
881    RENAME,
882    REORG,
883    REPAIR,
884    REPEATABLE,
885    REPLACE,
886    REPLACE_INVALID_CHARACTERS,
887    REPLICA,
888    REPLICATE,
889    REPLICATION,
890    REQUIRE,
891    RESET,
892    RESOLVE,
893    RESOURCE,
894    RESPECT,
895    RESTART,
896    RESTRICT,
897    RESTRICTED,
898    RESTRICTIONS,
899    RESTRICTIVE,
900    RESULT,
901    RESULTSET,
902    RESUME,
903    RETAIN,
904    RETURN,
905    RETURNING,
906    RETURNS,
907    REVOKE,
908    RIGHT,
909    RIGHTARG,
910    RLIKE,
911    RM,
912    ROLE,
913    ROLES,
914    ROLLBACK,
915    ROLLUP,
916    ROOT,
917    ROW,
918    ROWGROUPSIZE,
919    ROWID,
920    ROWS,
921    ROW_FORMAT,
922    ROW_NUMBER,
923    RULE,
924    RUN,
925    SAFE,
926    SAFE_CAST,
927    SAMPLE,
928    SAVEPOINT,
929    SCHEMA,
930    SCHEMAS,
931    SCOPE,
932    SCROLL,
933    SEARCH,
934    SECOND,
935    SECONDARY,
936    SECONDARY_ENGINE_ATTRIBUTE,
937    SECONDS,
938    SECRET,
939    SECURE,
940    SECURITY,
941    SEED,
942    SELECT,
943    SEMANTIC_VIEW,
944    SEMI,
945    SEND,
946    SENSITIVE,
947    SEPARATOR,
948    SEQUENCE,
949    SEQUENCEFILE,
950    SEQUENCES,
951    SERDE,
952    SERDEPROPERTIES,
953    SERIALIZABLE,
954    SERVER,
955    SERVICE,
956    SESSION,
957    SESSION_USER,
958    SET,
959    SETERROR,
960    SETOF,
961    SETS,
962    SETTINGS,
963    SHARE,
964    SHARED,
965    SHARING,
966    SHOW,
967    SIGNED,
968    SIMILAR,
969    SIMPLE,
970    SIZE,
971    SKIP,
972    SLOW,
973    SMALLINT,
974    SNAPSHOT,
975    SOME,
976    SORT,
977    SORTED,
978    SORTKEY,
979    SOURCE,
980    SPATIAL,
981    SPECIFIC,
982    SPECIFICTYPE,
983    SPGIST,
984    SQL,
985    SQLEXCEPTION,
986    SQLSTATE,
987    SQLWARNING,
988    SQL_BIG_RESULT,
989    SQL_BUFFER_RESULT,
990    SQL_CALC_FOUND_ROWS,
991    SQL_NO_CACHE,
992    SQL_SMALL_RESULT,
993    SQRT,
994    SRID,
995    STABLE,
996    STAGE,
997    START,
998    STARTS,
999    STATEMENT,
1000    STATIC,
1001    STATISTICS,
1002    STATS_AUTO_RECALC,
1003    STATS_PERSISTENT,
1004    STATS_SAMPLE_PAGES,
1005    STATUPDATE,
1006    STATUS,
1007    STDDEV_POP,
1008    STDDEV_SAMP,
1009    STDIN,
1010    STDOUT,
1011    STEP,
1012    STORAGE,
1013    STORAGE_INTEGRATION,
1014    STORAGE_SERIALIZATION_POLICY,
1015    STORED,
1016    STRAIGHT_JOIN,
1017    STREAM,
1018    STRICT,
1019    STRING,
1020    STRUCT,
1021    SUBMULTISET,
1022    SUBSCRIPT,
1023    SUBSCRIPTION,
1024    SUBSTR,
1025    SUBSTRING,
1026    SUBSTRING_REGEX,
1027    SUBTYPE,
1028    SUBTYPE_DIFF,
1029    SUBTYPE_OPCLASS,
1030    SUCCEEDS,
1031    SUM,
1032    SUPER,
1033    SUPERUSER,
1034    SUPPORT,
1035    SUSPEND,
1036    SWAP,
1037    SYMMETRIC,
1038    SYNC,
1039    SYNONYM,
1040    SYSTEM,
1041    SYSTEM_TIME,
1042    SYSTEM_USER,
1043    TABLE,
1044    TABLES,
1045    TABLESAMPLE,
1046    TABLESPACE,
1047    TAG,
1048    TARGET,
1049    TARGET_LAG,
1050    TASK,
1051    TBLPROPERTIES,
1052    TEMP,
1053    TEMPLATE,
1054    TEMPORARY,
1055    TEMPTABLE,
1056    TERMINATED,
1057    TERSE,
1058    TEXT,
1059    TEXTFILE,
1060    THEN,
1061    THROW,
1062    TIES,
1063    TIME,
1064    TIMEFORMAT,
1065    TIMESTAMP,
1066    TIMESTAMPTZ,
1067    TIMESTAMP_NTZ,
1068    TIMETZ,
1069    TIMEZONE,
1070    TIMEZONE_ABBR,
1071    TIMEZONE_HOUR,
1072    TIMEZONE_MINUTE,
1073    TIMEZONE_REGION,
1074    TINYBLOB,
1075    TINYINT,
1076    TINYTEXT,
1077    TO,
1078    TOP,
1079    TOTALS,
1080    TOTP,
1081    TRACE,
1082    TRAILING,
1083    TRAN,
1084    TRANSACTION,
1085    TRANSIENT,
1086    TRANSFORM,
1087    TRANSLATE,
1088    TRANSLATE_REGEX,
1089    TRANSLATION,
1090    TREAT,
1091    TREE,
1092    TRIGGER,
1093    TRIM,
1094    TRIM_ARRAY,
1095    TRUE,
1096    TRUNCATE,
1097    TRUNCATECOLUMNS,
1098    TRUSTED,
1099    TRY,
1100    TRY_CAST,
1101    TRY_CONVERT,
1102    TSQUERY,
1103    TSVECTOR,
1104    TUPLE,
1105    TYPE,
1106    TYPMOD_IN,
1107    TYPMOD_OUT,
1108    UBIGINT,
1109    UESCAPE,
1110    UHUGEINT,
1111    UINT128,
1112    UINT16,
1113    UINT256,
1114    UINT32,
1115    UINT64,
1116    UINT8,
1117    UNBOUNDED,
1118    UNCACHE,
1119    UNCOMMITTED,
1120    UNDEFINED,
1121    UNFREEZE,
1122    UNION,
1123    UNIQUE,
1124    UNKNOWN,
1125    UNLISTEN,
1126    UNLOAD,
1127    UNLOCK,
1128    UNLOGGED,
1129    UNMATCHED,
1130    UNNEST,
1131    UNPIVOT,
1132    UNSAFE,
1133    UNSET,
1134    UNSIGNED,
1135    UNTIL,
1136    UPDATE,
1137    UPPER,
1138    URL,
1139    USAGE,
1140    USE,
1141    USER,
1142    USER_RESOURCES,
1143    USING,
1144    USMALLINT,
1145    UTINYINT,
1146    UUID,
1147    VACUUM,
1148    VALID,
1149    VALIDATE,
1150    VALIDATION_MODE,
1151    VALIDATOR,
1152    VALUE,
1153    VALUES,
1154    VALUE_OF,
1155    VARBINARY,
1156    VARBIT,
1157    VARCHAR,
1158    VARCHAR2,
1159    VARIABLE,
1160    VARIABLES,
1161    VARIADIC,
1162    VARYING,
1163    VAR_POP,
1164    VAR_SAMP,
1165    VERBOSE,
1166    VERSION,
1167    VERSIONING,
1168    VERSIONS,
1169    VIEW,
1170    VIEWS,
1171    VIRTUAL,
1172    VOLATILE,
1173    VOLUME,
1174    WAITFOR,
1175    WAREHOUSE,
1176    WAREHOUSES,
1177    WEEK,
1178    WEEKS,
1179    WHEN,
1180    WHENEVER,
1181    WHERE,
1182    WHILE,
1183    WIDTH_BUCKET,
1184    WINDOW,
1185    WITH,
1186    WITHIN,
1187    WITHOUT,
1188    WITHOUT_ARRAY_WRAPPER,
1189    WORK,
1190    WORKLOAD_IDENTITY,
1191    WRAPPER,
1192    WRITE,
1193    XML,
1194    XMLNAMESPACES,
1195    XMLTABLE,
1196    XOR,
1197    YEAR,
1198    YEARS,
1199    YES,
1200    ZONE,
1201    ZORDER,
1202    ZSTD
1203);
1204
1205/// These keywords can't be used as a table alias, so that `FROM table_name alias`
1206/// can be parsed unambiguously without looking ahead.
1207pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
1208    // Reserved as both a table and a column alias:
1209    Keyword::WITH,
1210    Keyword::EXPLAIN,
1211    Keyword::ANALYZE,
1212    Keyword::SELECT,
1213    Keyword::WHERE,
1214    Keyword::GROUP,
1215    Keyword::SORT,
1216    Keyword::HAVING,
1217    Keyword::ORDER,
1218    Keyword::PIVOT,
1219    Keyword::UNPIVOT,
1220    Keyword::TOP,
1221    Keyword::LATERAL,
1222    Keyword::VIEW,
1223    Keyword::LIMIT,
1224    Keyword::OFFSET,
1225    Keyword::FETCH,
1226    Keyword::UNION,
1227    Keyword::EXCEPT,
1228    Keyword::INTERSECT,
1229    Keyword::MINUS,
1230    // Reserved only as a table alias in the `FROM`/`JOIN` clauses:
1231    Keyword::ON,
1232    Keyword::JOIN,
1233    Keyword::INNER,
1234    Keyword::CROSS,
1235    Keyword::FULL,
1236    Keyword::LEFT,
1237    Keyword::RIGHT,
1238    Keyword::NATURAL,
1239    Keyword::USING,
1240    Keyword::CLUSTER,
1241    Keyword::DISTRIBUTE,
1242    Keyword::GLOBAL,
1243    Keyword::ANTI,
1244    Keyword::SEMI,
1245    Keyword::RETURNING,
1246    Keyword::OUTPUT,
1247    Keyword::ASOF,
1248    Keyword::MATCH_CONDITION,
1249    // for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
1250    Keyword::OUTER,
1251    Keyword::SET,
1252    Keyword::QUALIFY,
1253    Keyword::WINDOW,
1254    Keyword::END,
1255    Keyword::FOR,
1256    // for MYSQL PARTITION SELECTION
1257    Keyword::PARTITION,
1258    // for Clickhouse PREWHERE
1259    Keyword::PREWHERE,
1260    Keyword::SETTINGS,
1261    Keyword::FORMAT,
1262    // for Snowflake START WITH .. CONNECT BY
1263    Keyword::START,
1264    Keyword::CONNECT,
1265    // Reserved for snowflake MATCH_RECOGNIZE
1266    Keyword::MATCH_RECOGNIZE,
1267    // Reserved for Snowflake table sample
1268    Keyword::SAMPLE,
1269    Keyword::TABLESAMPLE,
1270    Keyword::FROM,
1271    Keyword::OPEN,
1272];
1273
1274/// Can't be used as a column alias, so that `SELECT <expr> alias`
1275/// can be parsed unambiguously without looking ahead.
1276pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
1277    // Reserved as both a table and a column alias:
1278    Keyword::WITH,
1279    Keyword::EXPLAIN,
1280    Keyword::ANALYZE,
1281    Keyword::SELECT,
1282    Keyword::WHERE,
1283    Keyword::GROUP,
1284    Keyword::SORT,
1285    Keyword::HAVING,
1286    Keyword::ORDER,
1287    Keyword::TOP,
1288    Keyword::LATERAL,
1289    Keyword::VIEW,
1290    Keyword::LIMIT,
1291    Keyword::OFFSET,
1292    Keyword::FETCH,
1293    Keyword::UNION,
1294    Keyword::EXCEPT,
1295    Keyword::EXCLUDE,
1296    Keyword::INTERSECT,
1297    Keyword::MINUS,
1298    Keyword::CLUSTER,
1299    Keyword::DISTRIBUTE,
1300    Keyword::RETURNING,
1301    Keyword::VALUES,
1302    // Reserved only as a column alias in the `SELECT` clause
1303    Keyword::FROM,
1304    Keyword::INTO,
1305    Keyword::END,
1306];
1307
1308/// Global list of reserved keywords allowed after FROM.
1309/// Parser should call Dialect::get_reserved_keyword_after_from
1310/// to allow for each dialect to customize the list.
1311pub const RESERVED_FOR_TABLE_FACTOR: &[Keyword] = &[
1312    Keyword::INTO,
1313    Keyword::LIMIT,
1314    Keyword::HAVING,
1315    Keyword::WHERE,
1316];
1317
1318/// Global list of reserved keywords that cannot be parsed as identifiers
1319/// without special handling like quoting. Parser should call `Dialect::is_reserved_for_identifier`
1320/// to allow for each dialect to customize the list.
1321pub const RESERVED_FOR_IDENTIFIER: &[Keyword] = &[
1322    Keyword::EXISTS,
1323    Keyword::INTERVAL,
1324    Keyword::STRUCT,
1325    Keyword::TRIM,
1326];