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