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