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