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