1#[cfg(feature = "serde")]
26use serde::{Deserialize, Serialize};
27
28#[cfg(feature = "visitor")]
29use sqlparser_derive::{Visit, VisitMut};
30
31macro_rules! kw_def {
34 ($ident:ident = $string_keyword:expr) => {
35 pub const $ident: &'static str = $string_keyword;
36 };
37 ($ident:ident) => {
38 kw_def!($ident = stringify!($ident));
39 };
40}
41
42macro_rules! define_keywords {
45 ($(
46 $ident:ident $(= $string_keyword:expr)?
47 ),*) => {
48 #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
49 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50 #[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
51 #[allow(non_camel_case_types)]
52 pub enum Keyword {
53 NoKeyword,
54 $($ident),*
55 }
56
57 pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
58 $(Keyword::$ident),*
59 ];
60
61 $(kw_def!($ident $(= $string_keyword)?);)*
62 pub const ALL_KEYWORDS: &[&str] = &[
63 $($ident),*
64 ];
65 };
66}
67
68define_keywords!(
70 ABORT,
71 ABS,
72 ABSOLUTE,
73 ACTION,
74 ADD,
75 ADMIN,
76 AGAINST,
77 ALL,
78 ALLOCATE,
79 ALTER,
80 ALWAYS,
81 ANALYZE,
82 AND,
83 ANTI,
84 ANY,
85 APPLY,
86 ARCHIVE,
87 ARE,
88 ARRAY,
89 ARRAY_AGG,
90 ARRAY_MAX_CARDINALITY,
91 AS,
92 ASC,
93 ASENSITIVE,
94 ASSERT,
95 ASYMMETRIC,
96 AT,
97 ATOMIC,
98 ATTACH,
99 AUTHORIZATION,
100 AUTO,
101 AUTOINCREMENT,
102 AUTO_INCREMENT,
103 AVG,
104 AVRO,
105 BACKWARD,
106 BASE64,
107 BEGIN,
108 BEGIN_FRAME,
109 BEGIN_PARTITION,
110 BETWEEN,
111 BIGDECIMAL,
112 BIGINT,
113 BIGNUMERIC,
114 BINARY,
115 BINDING,
116 BLOB,
117 BLOOMFILTER,
118 BOOL,
119 BOOLEAN,
120 BOTH,
121 BROWSE,
122 BTREE,
123 BY,
124 BYPASSRLS,
125 BYTEA,
126 BYTES,
127 CACHE,
128 CALL,
129 CALLED,
130 CARDINALITY,
131 CASCADE,
132 CASCADED,
133 CASE,
134 CAST,
135 CEIL,
136 CEILING,
137 CENTURY,
138 CHAIN,
139 CHANGE,
140 CHANNEL,
141 CHAR,
142 CHARACTER,
143 CHARACTERS,
144 CHARACTER_LENGTH,
145 CHARSET,
146 CHAR_LENGTH,
147 CHECK,
148 CLOB,
149 CLONE,
150 CLOSE,
151 CLUSTER,
152 COALESCE,
153 COLLATE,
154 COLLATION,
155 COLLECT,
156 COLUMN,
157 COLUMNS,
158 COMMENT,
159 COMMIT,
160 COMMITTED,
161 COMPRESSION,
162 COMPUTE,
163 CONCURRENTLY,
164 CONDITION,
165 CONFLICT,
166 CONNECT,
167 CONNECTION,
168 CONSTRAINT,
169 CONTAINS,
170 CONVERT,
171 COPY,
172 COPY_OPTIONS,
173 CORR,
174 CORRESPONDING,
175 COUNT,
176 COVAR_POP,
177 COVAR_SAMP,
178 CREATE,
179 CREATEDB,
180 CREATEROLE,
181 CREDENTIALS,
182 CROSS,
183 CSV,
184 CUBE,
185 CUME_DIST,
186 CURRENT,
187 CURRENT_CATALOG,
188 CURRENT_DATE,
189 CURRENT_DEFAULT_TRANSFORM_GROUP,
190 CURRENT_PATH,
191 CURRENT_ROLE,
192 CURRENT_ROW,
193 CURRENT_SCHEMA,
194 CURRENT_TIME,
195 CURRENT_TIMESTAMP,
196 CURRENT_TRANSFORM_GROUP_FOR_TYPE,
197 CURRENT_USER,
198 CURSOR,
199 CYCLE,
200 DATA,
201 DATABASE,
202 DATE,
203 DATETIME,
204 DAY,
205 DAYOFWEEK,
206 DAYOFYEAR,
207 DEALLOCATE,
208 DEC,
209 DECADE,
210 DECIMAL,
211 DECLARE,
212 DEFAULT,
213 DEFERRABLE,
214 DEFERRED,
215 DELAYED,
216 DELETE,
217 DELIMITED,
218 DELIMITER,
219 DELTA,
220 DENSE_RANK,
221 DEREF,
222 DESC,
223 DESCRIBE,
224 DETAIL,
225 DETERMINISTIC,
226 DIRECTORY,
227 DISABLE,
228 DISCARD,
229 DISCONNECT,
230 DISTINCT,
231 DISTRIBUTE,
232 DIV,
233 DO,
234 DOUBLE,
235 DOW,
236 DOY,
237 DROP,
238 DRY,
239 DUPLICATE,
240 DYNAMIC,
241 EACH,
242 ELEMENT,
243 ELEMENTS,
244 ELSE,
245 EMPTY,
246 ENABLE,
247 ENCODING,
248 ENCRYPTION,
249 END,
250 END_EXEC = "END-EXEC",
251 ENDPOINT,
252 END_FRAME,
253 END_PARTITION,
254 ENFORCED,
255 ENGINE,
256 ENUM,
257 EPOCH,
258 EQUALS,
259 ERROR,
260 ESCAPE,
261 EVENT,
262 EVERY,
263 EXCEPT,
264 EXCLUDE,
265 EXCLUSIVE,
266 EXEC,
267 EXECUTE,
268 EXISTS,
269 EXP,
270 EXPANSION,
271 EXPLAIN,
272 EXPLICIT,
273 EXPORT,
274 EXTENDED,
275 EXTENSION,
276 EXTERNAL,
277 EXTRACT,
278 FAIL,
279 FALSE,
280 FETCH,
281 FIELDS,
282 FILE,
283 FILES,
284 FILE_FORMAT,
285 FILTER,
286 FIRST,
287 FIRST_VALUE,
288 FLOAT,
289 FLOAT4,
290 FLOAT64,
291 FLOAT8,
292 FLOOR,
293 FLUSH,
294 FOLLOWING,
295 FOR,
296 FORCE,
297 FORCE_NOT_NULL,
298 FORCE_NULL,
299 FORCE_QUOTE,
300 FOREIGN,
301 FORMAT,
302 FORWARD,
303 FRAME_ROW,
304 FREE,
305 FREEZE,
306 FROM,
307 FSCK,
308 FULL,
309 FULLTEXT,
310 FUNCTION,
311 FUNCTIONS,
312 FUSION,
313 GENERAL,
314 GENERATE,
315 GENERATED,
316 GEOGRAPHY,
317 GET,
318 GLOBAL,
319 GRANT,
320 GRANTED,
321 GRAPHVIZ,
322 GROUP,
323 GROUPING,
324 GROUPS,
325 HASH,
326 HAVING,
327 HEADER,
328 HIGH_PRIORITY,
329 HISTORY,
330 HIVEVAR,
331 HOLD,
332 HOSTS,
333 HOUR,
334 HOURS,
335 IDENTITY,
336 IF,
337 IGNORE,
338 ILIKE,
339 IMMEDIATE,
340 IMMUTABLE,
341 IN,
342 INCLUDE,
343 INCLUDE_NULL_VALUES,
344 INCREMENT,
345 INDEX,
346 INDICATOR,
347 INHERIT,
348 INITIALLY,
349 INNER,
350 INOUT,
351 INPUTFORMAT,
352 INSENSITIVE,
353 INSERT,
354 INT,
355 INT2,
356 INT4,
357 INT64,
358 INT8,
359 INTEGER,
360 INTERSECT,
361 INTERSECTION,
362 INTERVAL,
363 INTO,
364 IS,
365 ISODOW,
366 ISOLATION,
367 ISOWEEK,
368 ISOYEAR,
369 JAR,
370 JOIN,
371 JSON,
372 JSONB,
373 JSONFILE,
374 JSON_TABLE,
375 JULIAN,
376 KEY,
377 KILL,
378 LAG,
379 LANGUAGE,
380 LARGE,
381 LAST,
382 LAST_VALUE,
383 LATERAL,
384 LEAD,
385 LEADING,
386 LEFT,
387 LEVEL,
388 LIKE,
389 LIKE_REGEX,
390 LIMIT,
391 LISTAGG,
392 LN,
393 LOCAL,
394 LOCALTIME,
395 LOCALTIMESTAMP,
396 LOCATION,
397 LOCK,
398 LOCKED,
399 LOGIN,
400 LOGS,
401 LOWER,
402 LOW_PRIORITY,
403 MACRO,
404 MANAGEDLOCATION,
405 MATCH,
406 MATCHED,
407 MATERIALIZED,
408 MAX,
409 MAXVALUE,
410 MEDIUMINT,
411 MEMBER,
412 MERGE,
413 METADATA,
414 METHOD,
415 MICROSECOND,
416 MICROSECONDS,
417 MILLENIUM,
418 MILLENNIUM,
419 MILLISECOND,
420 MILLISECONDS,
421 MIN,
422 MINUTE,
423 MINVALUE,
424 MOD,
425 MODE,
426 MODIFIES,
427 MODULE,
428 MONTH,
429 MSCK,
430 MULTISET,
431 MUTATION,
432 NAME,
433 NANOSECOND,
434 NANOSECONDS,
435 NATIONAL,
436 NATURAL,
437 NCHAR,
438 NCLOB,
439 NEW,
440 NEXT,
441 NO,
442 NOBYPASSRLS,
443 NOCREATEDB,
444 NOCREATEROLE,
445 NOINHERIT,
446 NOLOGIN,
447 NONE,
448 NOREPLICATION,
449 NORMALIZE,
450 NOSCAN,
451 NOSUPERUSER,
452 NOT,
453 NOTHING,
454 NOWAIT,
455 NO_WRITE_TO_BINLOG,
456 NTH_VALUE,
457 NTILE,
458 NULL,
459 NULLIF,
460 NULLS,
461 NUMERIC,
462 NVARCHAR,
463 OBJECT,
464 OCCURRENCES_REGEX,
465 OCTETS,
466 OCTET_LENGTH,
467 OF,
468 OFFSET,
469 OLD,
470 ON,
471 ONLY,
472 OPEN,
473 OPERATOR,
474 OPTIMIZE,
475 OPTIMIZER_COSTS,
476 OPTION,
477 OPTIONS,
478 OR,
479 ORC,
480 ORDER,
481 OUT,
482 OUTER,
483 OUTPUTFORMAT,
484 OVER,
485 OVERFLOW,
486 OVERLAPS,
487 OVERLAY,
488 OVERWRITE,
489 OWNED,
490 PARAMETER,
491 PARQUET,
492 PARTITION,
493 PARTITIONED,
494 PARTITIONS,
495 PASSWORD,
496 PATH,
497 PATTERN,
498 PERCENT,
499 PERCENTILE_CONT,
500 PERCENTILE_DISC,
501 PERCENT_RANK,
502 PERIOD,
503 PIVOT,
504 PLACING,
505 PLANS,
506 PORTION,
507 POSITION,
508 POSITION_REGEX,
509 POWER,
510 PRAGMA,
511 PRECEDES,
512 PRECEDING,
513 PRECISION,
514 PREPARE,
515 PRESERVE,
516 PRIMARY,
517 PRIOR,
518 PRIVILEGES,
519 PROCEDURE,
520 PROGRAM,
521 PURGE,
522 QUALIFY,
523 QUARTER,
524 QUERY,
525 QUOTE,
526 RANGE,
527 RANK,
528 RAW,
529 RCFILE,
530 READ,
531 READS,
532 REAL,
533 RECURSIVE,
534 REF,
535 REFERENCES,
536 REFERENCING,
537 REGCLASS,
538 REGEXP,
539 REGR_AVGX,
540 REGR_AVGY,
541 REGR_COUNT,
542 REGR_INTERCEPT,
543 REGR_R2,
544 REGR_SLOPE,
545 REGR_SXX,
546 REGR_SXY,
547 REGR_SYY,
548 RELATIVE,
549 RELAY,
550 RELEASE,
551 RENAME,
552 REORG,
553 REPAIR,
554 REPEATABLE,
555 REPLACE,
556 REPLICA,
557 REPLICATION,
558 RESET,
559 RESPECT,
560 RESTART,
561 RESTRICT,
562 RESULT,
563 RETAIN,
564 RETURN,
565 RETURNING,
566 RETURNS,
567 REVOKE,
568 RIGHT,
569 RLIKE,
570 ROLE,
571 ROLLBACK,
572 ROLLUP,
573 ROOT,
574 ROW,
575 ROWID,
576 ROWS,
577 ROW_NUMBER,
578 RULE,
579 RUN,
580 SAFE_CAST,
581 SAVEPOINT,
582 SCHEMA,
583 SCOPE,
584 SCROLL,
585 SEARCH,
586 SECOND,
587 SECURITY,
588 SELECT,
589 SEMI,
590 SENSITIVE,
591 SEQUENCE,
592 SEQUENCEFILE,
593 SEQUENCES,
594 SERDE,
595 SERIALIZABLE,
596 SESSION,
597 SESSION_USER,
598 SET,
599 SETS,
600 SHARE,
601 SHOW,
602 SIMILAR,
603 SKIP,
604 SLOW,
605 SMALLINT,
606 SNAPSHOT,
607 SOME,
608 SORT,
609 SPATIAL,
610 SPECIFIC,
611 SPECIFICTYPE,
612 SQL,
613 SQLEXCEPTION,
614 SQLSTATE,
615 SQLWARNING,
616 SQRT,
617 STABLE,
618 STAGE,
619 START,
620 STATIC,
621 STATISTICS,
622 STATUS,
623 STDDEV_POP,
624 STDDEV_SAMP,
625 STDIN,
626 STDOUT,
627 STORAGE_INTEGRATION,
628 STORED,
629 STRICT,
630 STRING,
631 STRUCT,
632 SUBMULTISET,
633 SUBSTRING,
634 SUBSTRING_REGEX,
635 SUCCEEDS,
636 SUM,
637 SUPER,
638 SUPERUSER,
639 SWAP,
640 SYMMETRIC,
641 SYNC,
642 SYSTEM,
643 SYSTEM_TIME,
644 SYSTEM_USER,
645 TABLE,
646 TABLES,
647 TABLESAMPLE,
648 TBLPROPERTIES,
649 TEMP,
650 TEMPORARY,
651 TEXT,
652 TEXTFILE,
653 THEN,
654 TIES,
655 TIME,
656 TIMESTAMP,
657 TIMESTAMPTZ,
658 TIMETZ,
659 TIMEZONE,
660 TIMEZONE_ABBR,
661 TIMEZONE_HOUR,
662 TIMEZONE_MINUTE,
663 TIMEZONE_REGION,
664 TINYINT,
665 TO,
666 TOP,
667 TRAILING,
668 TRANSACTION,
669 TRANSIENT,
670 TRANSLATE,
671 TRANSLATE_REGEX,
672 TRANSLATION,
673 TREAT,
674 TRIGGER,
675 TRIM,
676 TRIM_ARRAY,
677 TRUE,
678 TRUNCATE,
679 TRY_CAST,
680 TYPE,
681 UESCAPE,
682 UNBOUNDED,
683 UNCACHE,
684 UNCOMMITTED,
685 UNION,
686 UNIQUE,
687 UNKNOWN,
688 UNLOCK,
689 UNLOGGED,
690 UNNEST,
691 UNPIVOT,
692 UNSIGNED,
693 UNTIL,
694 UPDATE,
695 UPPER,
696 URL,
697 USAGE,
698 USE,
699 USER,
700 USER_RESOURCES,
701 USING,
702 UUID,
703 VACUUM,
704 VALID,
705 VALIDATION_MODE,
706 VALUE,
707 VALUES,
708 VALUE_OF,
709 VARBINARY,
710 VARCHAR,
711 VARIABLES,
712 VARYING,
713 VAR_POP,
714 VAR_SAMP,
715 VERBOSE,
716 VERSION,
717 VERSIONING,
718 VIEW,
719 VIRTUAL,
720 VOLATILE,
721 WEEK,
722 WHEN,
723 WHENEVER,
724 WHERE,
725 WIDTH_BUCKET,
726 WINDOW,
727 WITH,
728 WITHIN,
729 WITHOUT,
730 WITHOUT_ARRAY_WRAPPER,
731 WORK,
732 WRITE,
733 XML,
734 XOR,
735 YEAR,
736 ZONE,
737 ZORDER
738);
739
740pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
743 Keyword::WITH,
745 Keyword::EXPLAIN,
746 Keyword::ANALYZE,
747 Keyword::SELECT,
748 Keyword::WHERE,
749 Keyword::GROUP,
750 Keyword::SORT,
751 Keyword::HAVING,
752 Keyword::ORDER,
753 Keyword::PIVOT,
754 Keyword::UNPIVOT,
755 Keyword::TOP,
756 Keyword::LATERAL,
757 Keyword::VIEW,
758 Keyword::LIMIT,
759 Keyword::OFFSET,
760 Keyword::FETCH,
761 Keyword::UNION,
762 Keyword::EXCEPT,
763 Keyword::INTERSECT,
764 Keyword::ON,
766 Keyword::JOIN,
767 Keyword::INNER,
768 Keyword::CROSS,
769 Keyword::FULL,
770 Keyword::LEFT,
771 Keyword::RIGHT,
772 Keyword::NATURAL,
773 Keyword::USING,
774 Keyword::CLUSTER,
775 Keyword::DISTRIBUTE,
776 Keyword::OUTER,
778 Keyword::SET,
779 Keyword::QUALIFY,
780 Keyword::WINDOW,
781 Keyword::END,
782 Keyword::FOR,
783 Keyword::PARTITION,
785];
786
787pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
790 Keyword::WITH,
792 Keyword::EXPLAIN,
793 Keyword::ANALYZE,
794 Keyword::SELECT,
795 Keyword::WHERE,
796 Keyword::GROUP,
797 Keyword::SORT,
798 Keyword::HAVING,
799 Keyword::ORDER,
800 Keyword::TOP,
801 Keyword::LATERAL,
802 Keyword::VIEW,
803 Keyword::LIMIT,
804 Keyword::OFFSET,
805 Keyword::FETCH,
806 Keyword::UNION,
807 Keyword::EXCEPT,
808 Keyword::INTERSECT,
809 Keyword::CLUSTER,
810 Keyword::DISTRIBUTE,
811 Keyword::FROM,
813 Keyword::INTO,
814 Keyword::END,
815];