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