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