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    PUBLICATION,
826    PURCHASE,
827    PURGE,
828    QUALIFY,
829    QUARTER,
830    QUERIES,
831    QUERY,
832    QUOTE,
833    RAISE,
834    RAISERROR,
835    RANGE,
836    RANK,
837    RAW,
838    RCFILE,
839    READ,
840    READS,
841    READ_ONLY,
842    REAL,
843    RECEIVE,
844    RECLUSTER,
845    RECURSIVE,
846    REF,
847    REFERENCES,
848    REFERENCING,
849    REFRESH,
850    REFRESH_MODE,
851    REGCLASS,
852    REGEXP,
853    REGION,
854    REGR_AVGX,
855    REGR_AVGY,
856    REGR_COUNT,
857    REGR_INTERCEPT,
858    REGR_R2,
859    REGR_SLOPE,
860    REGR_SXX,
861    REGR_SXY,
862    REGR_SYY,
863    REINDEX,
864    RELATIVE,
865    RELAY,
866    RELEASE,
867    RELEASES,
868    REMAINDER,
869    REMOTE,
870    REMOVE,
871    REMOVEQUOTES,
872    RENAME,
873    REORG,
874    REPAIR,
875    REPEATABLE,
876    REPLACE,
877    REPLACE_INVALID_CHARACTERS,
878    REPLICA,
879    REPLICATE,
880    REPLICATION,
881    REQUIRE,
882    RESET,
883    RESOLVE,
884    RESOURCE,
885    RESPECT,
886    RESTART,
887    RESTRICT,
888    RESTRICTED,
889    RESTRICTIONS,
890    RESTRICTIVE,
891    RESULT,
892    RESULTSET,
893    RESUME,
894    RETAIN,
895    RETURN,
896    RETURNING,
897    RETURNS,
898    REVOKE,
899    RIGHT,
900    RIGHTARG,
901    RLIKE,
902    RM,
903    ROLE,
904    ROLES,
905    ROLLBACK,
906    ROLLUP,
907    ROOT,
908    ROW,
909    ROWGROUPSIZE,
910    ROWID,
911    ROWS,
912    ROW_FORMAT,
913    ROW_NUMBER,
914    RULE,
915    RUN,
916    SAFE,
917    SAFE_CAST,
918    SAMPLE,
919    SAVEPOINT,
920    SCHEMA,
921    SCHEMAS,
922    SCOPE,
923    SCROLL,
924    SEARCH,
925    SECOND,
926    SECONDARY,
927    SECONDARY_ENGINE_ATTRIBUTE,
928    SECONDS,
929    SECRET,
930    SECURE,
931    SECURITY,
932    SEED,
933    SELECT,
934    SEMANTIC_VIEW,
935    SEMI,
936    SEND,
937    SENSITIVE,
938    SEPARATOR,
939    SEQUENCE,
940    SEQUENCEFILE,
941    SEQUENCES,
942    SERDE,
943    SERDEPROPERTIES,
944    SERIALIZABLE,
945    SERVER,
946    SERVICE,
947    SESSION,
948    SESSION_USER,
949    SET,
950    SETERROR,
951    SETOF,
952    SETS,
953    SETTINGS,
954    SHARE,
955    SHARED,
956    SHARING,
957    SHOW,
958    SIGNED,
959    SIMILAR,
960    SIMPLE,
961    SIZE,
962    SKIP,
963    SLOW,
964    SMALLINT,
965    SNAPSHOT,
966    SOME,
967    SORT,
968    SORTED,
969    SORTKEY,
970    SOURCE,
971    SPATIAL,
972    SPECIFIC,
973    SPECIFICTYPE,
974    SPGIST,
975    SQL,
976    SQLEXCEPTION,
977    SQLSTATE,
978    SQLWARNING,
979    SQL_BIG_RESULT,
980    SQL_BUFFER_RESULT,
981    SQL_CALC_FOUND_ROWS,
982    SQL_NO_CACHE,
983    SQL_SMALL_RESULT,
984    SQRT,
985    SRID,
986    STABLE,
987    STAGE,
988    START,
989    STARTS,
990    STATEMENT,
991    STATIC,
992    STATISTICS,
993    STATS_AUTO_RECALC,
994    STATS_PERSISTENT,
995    STATS_SAMPLE_PAGES,
996    STATUPDATE,
997    STATUS,
998    STDDEV_POP,
999    STDDEV_SAMP,
1000    STDIN,
1001    STDOUT,
1002    STEP,
1003    STORAGE,
1004    STORAGE_INTEGRATION,
1005    STORAGE_SERIALIZATION_POLICY,
1006    STORED,
1007    STRAIGHT_JOIN,
1008    STREAM,
1009    STRICT,
1010    STRING,
1011    STRUCT,
1012    SUBMULTISET,
1013    SUBSCRIPT,
1014    SUBSCRIPTION,
1015    SUBSTR,
1016    SUBSTRING,
1017    SUBSTRING_REGEX,
1018    SUBTYPE,
1019    SUBTYPE_DIFF,
1020    SUBTYPE_OPCLASS,
1021    SUCCEEDS,
1022    SUM,
1023    SUPER,
1024    SUPERUSER,
1025    SUPPORT,
1026    SUSPEND,
1027    SWAP,
1028    SYMMETRIC,
1029    SYNC,
1030    SYNONYM,
1031    SYSTEM,
1032    SYSTEM_TIME,
1033    SYSTEM_USER,
1034    TABLE,
1035    TABLES,
1036    TABLESAMPLE,
1037    TABLESPACE,
1038    TAG,
1039    TARGET,
1040    TARGET_LAG,
1041    TASK,
1042    TBLPROPERTIES,
1043    TEMP,
1044    TEMPLATE,
1045    TEMPORARY,
1046    TEMPTABLE,
1047    TERMINATED,
1048    TERSE,
1049    TEXT,
1050    TEXTFILE,
1051    THEN,
1052    THROW,
1053    TIES,
1054    TIME,
1055    TIMEFORMAT,
1056    TIMESTAMP,
1057    TIMESTAMPTZ,
1058    TIMESTAMP_NTZ,
1059    TIMETZ,
1060    TIMEZONE,
1061    TIMEZONE_ABBR,
1062    TIMEZONE_HOUR,
1063    TIMEZONE_MINUTE,
1064    TIMEZONE_REGION,
1065    TINYBLOB,
1066    TINYINT,
1067    TINYTEXT,
1068    TO,
1069    TOP,
1070    TOTALS,
1071    TOTP,
1072    TRACE,
1073    TRAILING,
1074    TRAN,
1075    TRANSACTION,
1076    TRANSIENT,
1077    TRANSLATE,
1078    TRANSLATE_REGEX,
1079    TRANSLATION,
1080    TREAT,
1081    TREE,
1082    TRIGGER,
1083    TRIM,
1084    TRIM_ARRAY,
1085    TRUE,
1086    TRUNCATE,
1087    TRUNCATECOLUMNS,
1088    TRY,
1089    TRY_CAST,
1090    TRY_CONVERT,
1091    TSQUERY,
1092    TSVECTOR,
1093    TUPLE,
1094    TYPE,
1095    TYPMOD_IN,
1096    TYPMOD_OUT,
1097    UBIGINT,
1098    UESCAPE,
1099    UHUGEINT,
1100    UINT128,
1101    UINT16,
1102    UINT256,
1103    UINT32,
1104    UINT64,
1105    UINT8,
1106    UNBOUNDED,
1107    UNCACHE,
1108    UNCOMMITTED,
1109    UNDEFINED,
1110    UNFREEZE,
1111    UNION,
1112    UNIQUE,
1113    UNKNOWN,
1114    UNLISTEN,
1115    UNLOAD,
1116    UNLOCK,
1117    UNLOGGED,
1118    UNMATCHED,
1119    UNNEST,
1120    UNPIVOT,
1121    UNSAFE,
1122    UNSET,
1123    UNSIGNED,
1124    UNTIL,
1125    UPDATE,
1126    UPPER,
1127    URL,
1128    USAGE,
1129    USE,
1130    USER,
1131    USER_RESOURCES,
1132    USING,
1133    USMALLINT,
1134    UTINYINT,
1135    UUID,
1136    VACUUM,
1137    VALID,
1138    VALIDATE,
1139    VALIDATION_MODE,
1140    VALIDATOR,
1141    VALUE,
1142    VALUES,
1143    VALUE_OF,
1144    VARBINARY,
1145    VARBIT,
1146    VARCHAR,
1147    VARCHAR2,
1148    VARIABLE,
1149    VARIABLES,
1150    VARIADIC,
1151    VARYING,
1152    VAR_POP,
1153    VAR_SAMP,
1154    VERBOSE,
1155    VERSION,
1156    VERSIONING,
1157    VERSIONS,
1158    VIEW,
1159    VIEWS,
1160    VIRTUAL,
1161    VOLATILE,
1162    VOLUME,
1163    WAITFOR,
1164    WAREHOUSE,
1165    WAREHOUSES,
1166    WEEK,
1167    WEEKS,
1168    WHEN,
1169    WHENEVER,
1170    WHERE,
1171    WHILE,
1172    WIDTH_BUCKET,
1173    WINDOW,
1174    WITH,
1175    WITHIN,
1176    WITHOUT,
1177    WITHOUT_ARRAY_WRAPPER,
1178    WORK,
1179    WORKLOAD_IDENTITY,
1180    WRAPPER,
1181    WRITE,
1182    XML,
1183    XMLNAMESPACES,
1184    XMLTABLE,
1185    XOR,
1186    YEAR,
1187    YEARS,
1188    YES,
1189    ZONE,
1190    ZORDER,
1191    ZSTD
1192);
1193
1194/// These keywords can't be used as a table alias, so that `FROM table_name alias`
1195/// can be parsed unambiguously without looking ahead.
1196pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
1197    // Reserved as both a table and a column alias:
1198    Keyword::WITH,
1199    Keyword::EXPLAIN,
1200    Keyword::ANALYZE,
1201    Keyword::SELECT,
1202    Keyword::WHERE,
1203    Keyword::GROUP,
1204    Keyword::SORT,
1205    Keyword::HAVING,
1206    Keyword::ORDER,
1207    Keyword::PIVOT,
1208    Keyword::UNPIVOT,
1209    Keyword::TOP,
1210    Keyword::LATERAL,
1211    Keyword::VIEW,
1212    Keyword::LIMIT,
1213    Keyword::OFFSET,
1214    Keyword::FETCH,
1215    Keyword::UNION,
1216    Keyword::EXCEPT,
1217    Keyword::INTERSECT,
1218    Keyword::MINUS,
1219    // Reserved only as a table alias in the `FROM`/`JOIN` clauses:
1220    Keyword::ON,
1221    Keyword::JOIN,
1222    Keyword::INNER,
1223    Keyword::CROSS,
1224    Keyword::FULL,
1225    Keyword::LEFT,
1226    Keyword::RIGHT,
1227    Keyword::NATURAL,
1228    Keyword::USING,
1229    Keyword::CLUSTER,
1230    Keyword::DISTRIBUTE,
1231    Keyword::GLOBAL,
1232    Keyword::ANTI,
1233    Keyword::SEMI,
1234    Keyword::RETURNING,
1235    Keyword::OUTPUT,
1236    Keyword::ASOF,
1237    Keyword::MATCH_CONDITION,
1238    // for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
1239    Keyword::OUTER,
1240    Keyword::SET,
1241    Keyword::QUALIFY,
1242    Keyword::WINDOW,
1243    Keyword::END,
1244    Keyword::FOR,
1245    // for MYSQL PARTITION SELECTION
1246    Keyword::PARTITION,
1247    // for Clickhouse PREWHERE
1248    Keyword::PREWHERE,
1249    Keyword::SETTINGS,
1250    Keyword::FORMAT,
1251    // for Snowflake START WITH .. CONNECT BY
1252    Keyword::START,
1253    Keyword::CONNECT,
1254    // Reserved for snowflake MATCH_RECOGNIZE
1255    Keyword::MATCH_RECOGNIZE,
1256    // Reserved for Snowflake table sample
1257    Keyword::SAMPLE,
1258    Keyword::TABLESAMPLE,
1259    Keyword::FROM,
1260    Keyword::OPEN,
1261];
1262
1263/// Can't be used as a column alias, so that `SELECT <expr> alias`
1264/// can be parsed unambiguously without looking ahead.
1265pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
1266    // Reserved as both a table and a column alias:
1267    Keyword::WITH,
1268    Keyword::EXPLAIN,
1269    Keyword::ANALYZE,
1270    Keyword::SELECT,
1271    Keyword::WHERE,
1272    Keyword::GROUP,
1273    Keyword::SORT,
1274    Keyword::HAVING,
1275    Keyword::ORDER,
1276    Keyword::TOP,
1277    Keyword::LATERAL,
1278    Keyword::VIEW,
1279    Keyword::LIMIT,
1280    Keyword::OFFSET,
1281    Keyword::FETCH,
1282    Keyword::UNION,
1283    Keyword::EXCEPT,
1284    Keyword::EXCLUDE,
1285    Keyword::INTERSECT,
1286    Keyword::MINUS,
1287    Keyword::CLUSTER,
1288    Keyword::DISTRIBUTE,
1289    Keyword::RETURNING,
1290    Keyword::VALUES,
1291    // Reserved only as a column alias in the `SELECT` clause
1292    Keyword::FROM,
1293    Keyword::INTO,
1294    Keyword::END,
1295];
1296
1297/// Global list of reserved keywords allowed after FROM.
1298/// Parser should call Dialect::get_reserved_keyword_after_from
1299/// to allow for each dialect to customize the list.
1300pub const RESERVED_FOR_TABLE_FACTOR: &[Keyword] = &[
1301    Keyword::INTO,
1302    Keyword::LIMIT,
1303    Keyword::HAVING,
1304    Keyword::WHERE,
1305];
1306
1307/// Global list of reserved keywords that cannot be parsed as identifiers
1308/// without special handling like quoting. Parser should call `Dialect::is_reserved_for_identifier`
1309/// to allow for each dialect to customize the list.
1310pub const RESERVED_FOR_IDENTIFIER: &[Keyword] = &[
1311    Keyword::EXISTS,
1312    Keyword::INTERVAL,
1313    Keyword::STRUCT,
1314    Keyword::TRIM,
1315];