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