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