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