1#[cfg(feature = "serde")]
28use serde::{Deserialize, Serialize};
29
30macro_rules! kw_def {
33 ($ident:ident = $string_keyword:expr) => {
34 pub const $ident: &'static str = $string_keyword;
35 };
36 ($ident:ident) => {
37 kw_def!($ident = stringify!($ident));
38 };
39}
40
41macro_rules! define_keywords {
44 ($(
45 $ident:ident $(= $string_keyword:expr)?
46 ),*) => {
47 #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
48 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
49 #[allow(non_camel_case_types)]
50 pub enum Keyword {
51 NoKeyword,
52 $($ident),*
53 }
54
55 pub const ALL_KEYWORDS_INDEX: &[Keyword] = &[
56 $(Keyword::$ident),*
57 ];
58
59 $(kw_def!($ident $(= $string_keyword)?);)*
60 pub const ALL_KEYWORDS: &[&str] = &[
61 $($ident),*
62 ];
63 };
64}
65
66define_keywords!(
68 ABORT,
69 ABS,
70 ACTION,
71 ADD,
72 ALL,
73 ALLOCATE,
74 ALTER,
75 ANALYZE,
76 AND,
77 ANY,
78 APPLY,
79 ARE,
80 ARRAY,
81 ARRAY_AGG,
82 ARRAY_MAX_CARDINALITY,
83 AS,
84 ASC,
85 ASENSITIVE,
86 ASSERT,
87 ASYMMETRIC,
88 AT,
89 ATOMIC,
90 AUTHORIZATION,
91 AUTOINCREMENT,
92 AUTO_INCREMENT,
93 AVG,
94 AVRO,
95 BEGIN,
96 BEGIN_FRAME,
97 BEGIN_PARTITION,
98 BETWEEN,
99 BIGINT,
100 BINARY,
101 BLOB,
102 BOOLEAN,
103 BOTH,
104 BY,
105 BYTEA,
106 CACHE,
107 CALL,
108 CALLED,
109 CARDINALITY,
110 CASCADE,
111 CASCADED,
112 CASE,
113 CAST,
114 CEIL,
115 CEILING,
116 CHAIN,
117 CHANGE,
118 CHAR,
119 CHARACTER,
120 CHARACTER_LENGTH,
121 CHAR_LENGTH,
122 CHECK,
123 CLOB,
124 CLOSE,
125 CLUSTER,
126 COALESCE,
127 COLLATE,
128 COLLECT,
129 COLUMN,
130 COLUMNS,
131 COMMENT,
132 COMMIT,
133 COMMITTED,
134 COMPUTE,
135 CONDITION,
136 CONNECT,
137 CONSTRAINT,
138 CONTAINS,
139 CONVERT,
140 COPY,
141 CORR,
142 CORRESPONDING,
143 COUNT,
144 COVAR_POP,
145 COVAR_SAMP,
146 CREATE,
147 CROSS,
148 CSV,
149 CUBE,
150 CUME_DIST,
151 CURRENT,
152 CURRENT_CATALOG,
153 CURRENT_DATE,
154 CURRENT_DEFAULT_TRANSFORM_GROUP,
155 CURRENT_PATH,
156 CURRENT_ROLE,
157 CURRENT_ROW,
158 CURRENT_SCHEMA,
159 CURRENT_TIME,
160 CURRENT_TIMESTAMP,
161 CURRENT_TRANSFORM_GROUP_FOR_TYPE,
162 CURRENT_USER,
163 CURSOR,
164 CYCLE,
165 DATA,
166 DATABASE,
167 DATE,
168 DAY,
169 DEALLOCATE,
170 DEC,
171 DECIMAL,
172 DECLARE,
173 DEFAULT,
174 DELETE,
175 DELIMITED,
176 DENSE_RANK,
177 DEREF,
178 DESC,
179 DESCRIBE,
180 DETERMINISTIC,
181 DIRECTORY,
182 DISCONNECT,
183 DISTINCT,
184 DISTRIBUTE,
185 DOUBLE,
186 DROP,
187 DUPLICATE,
188 DYNAMIC,
189 EACH,
190 ELEMENT,
191 ELSE,
192 END,
193 END_EXEC = "END-EXEC",
194 END_FRAME,
195 END_PARTITION,
196 EQUALS,
197 ERROR,
198 ESCAPE,
199 EVENT,
200 EVERY,
201 EXCEPT,
202 EXEC,
203 EXECUTE,
204 EXISTS,
205 EXP,
206 EXPLAIN,
207 EXTENDED,
208 EXTERNAL,
209 EXTRACT,
210 FAIL,
211 FALSE,
212 FETCH,
213 FIELDS,
214 FILTER,
215 FIRST,
216 FIRST_VALUE,
217 FLOAT,
218 FLOOR,
219 FOLLOWING,
220 FOR,
221 FOREIGN,
222 FORMAT,
223 FRAME_ROW,
224 FREE,
225 FROM,
226 FULL,
227 FUNCTION,
228 FUSION,
229 GET,
230 GLOBAL,
231 GRANT,
232 GRANTED,
233 GROUP,
234 GROUPING,
235 GROUPS,
236 HAVING,
237 HEADER,
238 HIVEVAR,
239 HOLD,
240 HOUR,
241 IDENTITY,
242 IF,
243 IGNORE,
244 ILIKE,
245 IN,
246 INDEX,
247 INDICATOR,
248 INNER,
249 INOUT,
250 INPUTFORMAT,
251 INSENSITIVE,
252 INSERT,
253 INT,
254 INTEGER,
255 INTERSECT,
256 INTERSECTION,
257 INTERVAL,
258 INTO,
259 IS,
260 ISOLATION,
261 JOIN,
262 JSONFILE,
263 KEY,
264 LAG,
265 LANGUAGE,
266 LARGE,
267 LAST,
268 LAST_VALUE,
269 LATERAL,
270 LEAD,
271 LEADING,
272 LEFT,
273 LEVEL,
274 LIKE,
275 LIKE_REGEX,
276 LIMIT,
277 LISTAGG,
278 LN,
279 LOCAL,
280 LOCALTIME,
281 LOCALTIMESTAMP,
282 LOCATION,
283 LOWER,
284 MANAGEDLOCATION,
285 MATCH,
286 MATERIALIZED,
287 MAX,
288 MEMBER,
289 MERGE,
290 METADATA,
291 METHOD,
292 MIN,
293 MINUTE,
294 MOD,
295 MODIFIES,
296 MODULE,
297 MONTH,
298 MSCK,
299 MULTISET,
300 NATIONAL,
301 NATURAL,
302 NCHAR,
303 NCLOB,
304 NEW,
305 NEXT,
306 NO,
307 NONE,
308 NORMALIZE,
309 NOSCAN,
310 NOT,
311 NTH_VALUE,
312 NTILE,
313 NULL,
314 NULLIF,
315 NULLS,
316 NUMERIC,
317 OBJECT,
318 OCCURRENCES_REGEX,
319 OCTET_LENGTH,
320 OF,
321 OFFSET,
322 OLD,
323 ON,
324 ONLY,
325 OPEN,
326 OPTION,
327 OR,
328 ORC,
329 ORDER,
330 OUT,
331 OUTER,
332 OUTPUTFORMAT,
333 OVER,
334 OVERFLOW,
335 OVERLAPS,
336 OVERLAY,
337 OVERWRITE,
338 PARAMETER,
339 PARQUET,
340 PARTITION,
341 PARTITIONED,
342 PARTITIONS,
343 PERCENT,
344 PERCENTILE_CONT,
345 PERCENTILE_DISC,
346 PERCENT_RANK,
347 PERIOD,
348 PORTION,
349 POSITION,
350 POSITION_REGEX,
351 POWER,
352 PRECEDES,
353 PRECEDING,
354 PRECISION,
355 PREPARE,
356 PRIMARY,
357 PRIVILEGES,
358 PROCEDURE,
359 PURGE,
360 RANGE,
361 RANK,
362 RCFILE,
363 READ,
364 READS,
365 REAL,
366 RECURSIVE,
367 REF,
368 REFERENCES,
369 REFERENCING,
370 REGCLASS,
371 REGR_AVGX,
372 REGR_AVGY,
373 REGR_COUNT,
374 REGR_INTERCEPT,
375 REGR_R2,
376 REGR_SLOPE,
377 REGR_SXX,
378 REGR_SXY,
379 REGR_SYY,
380 RELEASE,
381 RENAME,
382 REPAIR,
383 REPEATABLE,
384 REPLACE,
385 RESTRICT,
386 RESULT,
387 RETURN,
388 RETURNS,
389 REVOKE,
390 RIGHT,
391 ROLLBACK,
392 ROLLUP,
393 ROW,
394 ROWID,
395 ROWS,
396 ROW_NUMBER,
397 SAVEPOINT,
398 SCHEMA,
399 SCOPE,
400 SCROLL,
401 SEARCH,
402 SECOND,
403 SELECT,
404 SENSITIVE,
405 SEQUENCE,
406 SEQUENCEFILE,
407 SEQUENCES,
408 SERDE,
409 SERIALIZABLE,
410 SESSION,
411 SESSION_USER,
412 SET,
413 SETS,
414 SHARE,
415 SHOW,
416 SIMILAR,
417 SMALLINT,
418 SNAPSHOT,
419 SOME,
420 SORT,
421 SPECIFIC,
422 SPECIFICTYPE,
423 SQL,
424 SQLEXCEPTION,
425 SQLSTATE,
426 SQLWARNING,
427 SQRT,
428 START,
429 STATIC,
430 STATISTICS,
431 STDDEV_POP,
432 STDDEV_SAMP,
433 STDIN,
434 STORED,
435 STRING,
436 SUBMULTISET,
437 SUBSTRING,
438 SUBSTRING_REGEX,
439 SUCCEEDS,
440 SUM,
441 SYMMETRIC,
442 SYNC,
443 SYSTEM,
444 SYSTEM_TIME,
445 SYSTEM_USER,
446 TABLE,
447 TABLES,
448 TABLESAMPLE,
449 TBLPROPERTIES,
450 TEMP,
451 TEMPORARY,
452 TEXT,
453 TEXTFILE,
454 THEN,
455 TIES,
456 TIME,
457 TIMESTAMP,
458 TIMEZONE_HOUR,
459 TIMEZONE_MINUTE,
460 TINYINT,
461 TO,
462 TOP,
463 TRAILING,
464 TRANSACTION,
465 TRANSLATE,
466 TRANSLATE_REGEX,
467 TRANSLATION,
468 TREAT,
469 TRIGGER,
470 TRIM,
471 TRIM_ARRAY,
472 TRUE,
473 TRUNCATE,
474 TRY_CAST,
475 TYPE,
476 UESCAPE,
477 UNBOUNDED,
478 UNCOMMITTED,
479 UNION,
480 UNIQUE,
481 UNKNOWN,
482 UNNEST,
483 UPDATE,
484 UPPER,
485 USAGE,
486 USER,
487 USING,
488 UUID,
489 VALUE,
490 VALUES,
491 VALUE_OF,
492 VARBINARY,
493 VARCHAR,
494 VARYING,
495 VAR_POP,
496 VAR_SAMP,
497 VERBOSE,
498 VERSIONING,
499 VIEW,
500 VIRTUAL,
501 WHEN,
502 WHENEVER,
503 WHERE,
504 WIDTH_BUCKET,
505 WINDOW,
506 WITH,
507 WITHIN,
508 WITHOUT,
509 WORK,
510 WRITE,
511 XOR,
512 YEAR,
513 ZONE
514);
515
516pub const RESERVED_FOR_TABLE_ALIAS: &[Keyword] = &[
519 Keyword::WITH,
521 Keyword::EXPLAIN,
522 Keyword::ANALYZE,
523 Keyword::SELECT,
524 Keyword::WHERE,
525 Keyword::GROUP,
526 Keyword::SORT,
527 Keyword::HAVING,
528 Keyword::ORDER,
529 Keyword::TOP,
530 Keyword::LATERAL,
531 Keyword::VIEW,
532 Keyword::LIMIT,
533 Keyword::OFFSET,
534 Keyword::FETCH,
535 Keyword::UNION,
536 Keyword::EXCEPT,
537 Keyword::INTERSECT,
538 Keyword::ON,
540 Keyword::JOIN,
541 Keyword::INNER,
542 Keyword::CROSS,
543 Keyword::FULL,
544 Keyword::LEFT,
545 Keyword::RIGHT,
546 Keyword::NATURAL,
547 Keyword::USING,
548 Keyword::CLUSTER,
549 Keyword::DISTRIBUTE,
550 Keyword::OUTER,
552 Keyword::SET,
553];
554
555pub const RESERVED_FOR_COLUMN_ALIAS: &[Keyword] = &[
558 Keyword::WITH,
560 Keyword::EXPLAIN,
561 Keyword::ANALYZE,
562 Keyword::SELECT,
563 Keyword::WHERE,
564 Keyword::GROUP,
565 Keyword::SORT,
566 Keyword::HAVING,
567 Keyword::ORDER,
568 Keyword::TOP,
569 Keyword::LATERAL,
570 Keyword::VIEW,
571 Keyword::LIMIT,
572 Keyword::OFFSET,
573 Keyword::FETCH,
574 Keyword::UNION,
575 Keyword::EXCEPT,
576 Keyword::INTERSECT,
577 Keyword::CLUSTER,
578 Keyword::DISTRIBUTE,
579 Keyword::FROM,
581];