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