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    POLICY,
733    POLYGON,
734    POOL,
735    PORTION,
736    POSITION,
737    POSITION_REGEX,
738    POWER,
739    PRAGMA,
740    PRECEDES,
741    PRECEDING,
742    PRECISION,
743    PREPARE,
744    PRESERVE,
745    PREWHERE,
746    PRIMARY,
747    PRINT,
748    PRIOR,
749    PRIVILEGES,
750    PROCEDURE,
751    PROFILE,
752    PROGRAM,
753    PROJECTION,
754    PUBLIC,
755    PURCHASE,
756    PURGE,
757    QUALIFY,
758    QUARTER,
759    QUERY,
760    QUOTE,
761    RAISE,
762    RAISERROR,
763    RANGE,
764    RANK,
765    RAW,
766    RCFILE,
767    READ,
768    READS,
769    READ_ONLY,
770    REAL,
771    RECLUSTER,
772    RECURSIVE,
773    REF,
774    REFERENCES,
775    REFERENCING,
776    REFRESH_MODE,
777    REGCLASS,
778    REGEXP,
779    REGION,
780    REGR_AVGX,
781    REGR_AVGY,
782    REGR_COUNT,
783    REGR_INTERCEPT,
784    REGR_R2,
785    REGR_SLOPE,
786    REGR_SXX,
787    REGR_SXY,
788    REGR_SYY,
789    REINDEX,
790    RELATIVE,
791    RELAY,
792    RELEASE,
793    RELEASES,
794    REMOTE,
795    REMOVE,
796    RENAME,
797    REORG,
798    REPAIR,
799    REPEATABLE,
800    REPLACE,
801    REPLACE_INVALID_CHARACTERS,
802    REPLICA,
803    REPLICATE,
804    REPLICATION,
805    REQUIRE,
806    RESET,
807    RESOLVE,
808    RESOURCE,
809    RESPECT,
810    RESTART,
811    RESTRICT,
812    RESTRICTED,
813    RESTRICTIONS,
814    RESTRICTIVE,
815    RESULT,
816    RESULTSET,
817    RESUME,
818    RETAIN,
819    RETURN,
820    RETURNING,
821    RETURNS,
822    REVOKE,
823    RIGHT,
824    RLIKE,
825    RM,
826    ROLE,
827    ROLES,
828    ROLLBACK,
829    ROLLUP,
830    ROOT,
831    ROW,
832    ROWGROUPSIZE,
833    ROWID,
834    ROWS,
835    ROW_FORMAT,
836    ROW_NUMBER,
837    RULE,
838    RUN,
839    SAFE,
840    SAFE_CAST,
841    SAMPLE,
842    SAVEPOINT,
843    SCHEMA,
844    SCHEMAS,
845    SCOPE,
846    SCROLL,
847    SEARCH,
848    SECOND,
849    SECONDARY,
850    SECONDARY_ENGINE_ATTRIBUTE,
851    SECONDS,
852    SECRET,
853    SECURE,
854    SECURITY,
855    SEED,
856    SELECT,
857    SEMANTIC_VIEW,
858    SEMI,
859    SENSITIVE,
860    SEPARATOR,
861    SEQUENCE,
862    SEQUENCEFILE,
863    SEQUENCES,
864    SERDE,
865    SERDEPROPERTIES,
866    SERIALIZABLE,
867    SERVER,
868    SERVICE,
869    SESSION,
870    SESSION_USER,
871    SET,
872    SETERROR,
873    SETS,
874    SETTINGS,
875    SHARE,
876    SHARED,
877    SHARING,
878    SHOW,
879    SIGNED,
880    SIMILAR,
881    SKIP,
882    SLOW,
883    SMALLINT,
884    SNAPSHOT,
885    SOME,
886    SORT,
887    SORTED,
888    SOURCE,
889    SPATIAL,
890    SPECIFIC,
891    SPECIFICTYPE,
892    SPGIST,
893    SQL,
894    SQLEXCEPTION,
895    SQLSTATE,
896    SQLWARNING,
897    SQRT,
898    SRID,
899    STABLE,
900    STAGE,
901    START,
902    STARTS,
903    STATEMENT,
904    STATIC,
905    STATISTICS,
906    STATS_AUTO_RECALC,
907    STATS_PERSISTENT,
908    STATS_SAMPLE_PAGES,
909    STATUS,
910    STDDEV_POP,
911    STDDEV_SAMP,
912    STDIN,
913    STDOUT,
914    STEP,
915    STORAGE,
916    STORAGE_INTEGRATION,
917    STORAGE_SERIALIZATION_POLICY,
918    STORED,
919    STRAIGHT_JOIN,
920    STREAM,
921    STRICT,
922    STRING,
923    STRUCT,
924    SUBMULTISET,
925    SUBSTR,
926    SUBSTRING,
927    SUBSTRING_REGEX,
928    SUCCEEDS,
929    SUM,
930    SUPER,
931    SUPERUSER,
932    SUPPORT,
933    SUSPEND,
934    SWAP,
935    SYMMETRIC,
936    SYNC,
937    SYSTEM,
938    SYSTEM_TIME,
939    SYSTEM_USER,
940    TABLE,
941    TABLES,
942    TABLESAMPLE,
943    TABLESPACE,
944    TAG,
945    TARGET,
946    TARGET_LAG,
947    TASK,
948    TBLPROPERTIES,
949    TEMP,
950    TEMPORARY,
951    TEMPTABLE,
952    TERMINATED,
953    TERSE,
954    TEXT,
955    TEXTFILE,
956    THEN,
957    TIES,
958    TIME,
959    TIMEFORMAT,
960    TIMESTAMP,
961    TIMESTAMPTZ,
962    TIMESTAMP_NTZ,
963    TIMETZ,
964    TIMEZONE,
965    TIMEZONE_ABBR,
966    TIMEZONE_HOUR,
967    TIMEZONE_MINUTE,
968    TIMEZONE_REGION,
969    TINYBLOB,
970    TINYINT,
971    TINYTEXT,
972    TO,
973    TOP,
974    TOTALS,
975    TRACE,
976    TRAILING,
977    TRANSACTION,
978    TRANSIENT,
979    TRANSLATE,
980    TRANSLATE_REGEX,
981    TRANSLATION,
982    TREAT,
983    TRIGGER,
984    TRIM,
985    TRIM_ARRAY,
986    TRUE,
987    TRUNCATE,
988    TRUNCATECOLUMNS,
989    TRY,
990    TRY_CAST,
991    TRY_CONVERT,
992    TSQUERY,
993    TSVECTOR,
994    TUPLE,
995    TYPE,
996    UBIGINT,
997    UESCAPE,
998    UHUGEINT,
999    UINT128,
1000    UINT16,
1001    UINT256,
1002    UINT32,
1003    UINT64,
1004    UINT8,
1005    UNBOUNDED,
1006    UNCACHE,
1007    UNCOMMITTED,
1008    UNDEFINED,
1009    UNFREEZE,
1010    UNION,
1011    UNIQUE,
1012    UNKNOWN,
1013    UNLISTEN,
1014    UNLOAD,
1015    UNLOCK,
1016    UNLOGGED,
1017    UNMATCHED,
1018    UNNEST,
1019    UNPIVOT,
1020    UNSAFE,
1021    UNSET,
1022    UNSIGNED,
1023    UNTIL,
1024    UPDATE,
1025    UPPER,
1026    URL,
1027    USAGE,
1028    USE,
1029    USER,
1030    USER_RESOURCES,
1031    USING,
1032    USMALLINT,
1033    UTINYINT,
1034    UUID,
1035    VACUUM,
1036    VALID,
1037    VALIDATE,
1038    VALIDATION_MODE,
1039    VALUE,
1040    VALUES,
1041    VALUE_OF,
1042    VARBINARY,
1043    VARBIT,
1044    VARCHAR,
1045    VARIABLES,
1046    VARYING,
1047    VAR_POP,
1048    VAR_SAMP,
1049    VERBOSE,
1050    VERSION,
1051    VERSIONING,
1052    VERSIONS,
1053    VIEW,
1054    VIEWS,
1055    VIRTUAL,
1056    VOLATILE,
1057    VOLUME,
1058    WAREHOUSE,
1059    WAREHOUSES,
1060    WEEK,
1061    WEEKS,
1062    WHEN,
1063    WHENEVER,
1064    WHERE,
1065    WHILE,
1066    WIDTH_BUCKET,
1067    WINDOW,
1068    WITH,
1069    WITHIN,
1070    WITHOUT,
1071    WITHOUT_ARRAY_WRAPPER,
1072    WORK,
1073    WRAPPER,
1074    WRITE,
1075    XML,
1076    XMLNAMESPACES,
1077    XMLTABLE,
1078    XOR,
1079    YEAR,
1080    YEARS,
1081    ZONE,
1082    ZORDER,
1083    ZSTD
1084);
1085
1086/// These keywords can't be used as a table alias, so that `FROM table_name alias`
1087/// can be parsed unambiguously without looking ahead.
1088pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
1089    // Reserved as both a table and a column alias:
1090    Keyword::WITH,
1091    Keyword::EXPLAIN,
1092    Keyword::ANALYZE,
1093    Keyword::SELECT,
1094    Keyword::WHERE,
1095    Keyword::GROUP,
1096    Keyword::SORT,
1097    Keyword::HAVING,
1098    Keyword::ORDER,
1099    Keyword::PIVOT,
1100    Keyword::UNPIVOT,
1101    Keyword::TOP,
1102    Keyword::LATERAL,
1103    Keyword::VIEW,
1104    Keyword::LIMIT,
1105    Keyword::OFFSET,
1106    Keyword::FETCH,
1107    Keyword::UNION,
1108    Keyword::EXCEPT,
1109    Keyword::INTERSECT,
1110    Keyword::MINUS,
1111    // Reserved only as a table alias in the `FROM`/`JOIN` clauses:
1112    Keyword::ON,
1113    Keyword::JOIN,
1114    Keyword::INNER,
1115    Keyword::CROSS,
1116    Keyword::FULL,
1117    Keyword::LEFT,
1118    Keyword::RIGHT,
1119    Keyword::NATURAL,
1120    Keyword::USING,
1121    Keyword::CLUSTER,
1122    Keyword::DISTRIBUTE,
1123    Keyword::GLOBAL,
1124    Keyword::ANTI,
1125    Keyword::SEMI,
1126    Keyword::RETURNING,
1127    Keyword::ASOF,
1128    Keyword::MATCH_CONDITION,
1129    // for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
1130    Keyword::OUTER,
1131    Keyword::SET,
1132    Keyword::QUALIFY,
1133    Keyword::WINDOW,
1134    Keyword::END,
1135    Keyword::FOR,
1136    // for MYSQL PARTITION SELECTION
1137    Keyword::PARTITION,
1138    // for Clickhouse PREWHERE
1139    Keyword::PREWHERE,
1140    Keyword::SETTINGS,
1141    Keyword::FORMAT,
1142    // for Snowflake START WITH .. CONNECT BY
1143    Keyword::START,
1144    Keyword::CONNECT,
1145    // Reserved for snowflake MATCH_RECOGNIZE
1146    Keyword::MATCH_RECOGNIZE,
1147    // Reserved for Snowflake table sample
1148    Keyword::SAMPLE,
1149    Keyword::TABLESAMPLE,
1150    Keyword::FROM,
1151    Keyword::OPEN,
1152];
1153
1154/// Can't be used as a column alias, so that `SELECT <expr> alias`
1155/// can be parsed unambiguously without looking ahead.
1156pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
1157    // Reserved as both a table and a column alias:
1158    Keyword::WITH,
1159    Keyword::EXPLAIN,
1160    Keyword::ANALYZE,
1161    Keyword::SELECT,
1162    Keyword::WHERE,
1163    Keyword::GROUP,
1164    Keyword::SORT,
1165    Keyword::HAVING,
1166    Keyword::ORDER,
1167    Keyword::TOP,
1168    Keyword::LATERAL,
1169    Keyword::VIEW,
1170    Keyword::LIMIT,
1171    Keyword::OFFSET,
1172    Keyword::FETCH,
1173    Keyword::UNION,
1174    Keyword::EXCEPT,
1175    Keyword::EXCLUDE,
1176    Keyword::INTERSECT,
1177    Keyword::MINUS,
1178    Keyword::CLUSTER,
1179    Keyword::DISTRIBUTE,
1180    Keyword::RETURNING,
1181    // Reserved only as a column alias in the `SELECT` clause
1182    Keyword::FROM,
1183    Keyword::INTO,
1184    Keyword::END,
1185];
1186
1187// Global list of reserved keywords allowed after FROM.
1188// Parser should call Dialect::get_reserved_keyword_after_from
1189// to allow for each dialect to customize the list.
1190pub const RESERVED_FOR_TABLE_FACTOR: &[Keyword] = &[
1191    Keyword::INTO,
1192    Keyword::LIMIT,
1193    Keyword::HAVING,
1194    Keyword::WHERE,
1195];
1196
1197/// Global list of reserved keywords that cannot be parsed as identifiers
1198/// without special handling like quoting. Parser should call `Dialect::is_reserved_for_identifier`
1199/// to allow for each dialect to customize the list.
1200pub const RESERVED_FOR_IDENTIFIER: &[Keyword] = &[
1201    Keyword::EXISTS,
1202    Keyword::INTERVAL,
1203    Keyword::STRUCT,
1204    Keyword::TRIM,
1205];