@@ -41,12 +41,24 @@ macro_rules! define_keywords {
41
41
( $(
42
42
$ident: ident $( = $string_keyword: expr) ?
43
43
) ,* ) => {
44
- $( kw_def!( $ident $( = $string_keyword) ?) ; ) *
44
+ #[ derive( Debug , Clone , Copy , PartialEq , PartialOrd , Eq , Ord ) ]
45
+ #[ allow( non_camel_case_types) ]
46
+ pub enum Keyword {
47
+ NoKeyword ,
48
+ $( $ident) ,*
49
+ }
45
50
51
+ pub const ALL_KEYWORDS_INDEX : & [ Keyword ] = & [
52
+ $( Keyword :: $ident) ,*
53
+ ] ;
54
+
55
+ $( kw_def!( $ident $( = $string_keyword) ?) ; ) *
46
56
pub const ALL_KEYWORDS : & [ & str ] = & [
47
57
$( $ident) ,*
48
58
] ;
49
- }
59
+
60
+ } ;
61
+
50
62
}
51
63
52
64
// The following keywords should be sorted to be able to match using binary search
@@ -434,20 +446,52 @@ define_keywords!(
434
446
435
447
/// These keywords can't be used as a table alias, so that `FROM table_name alias`
436
448
/// can be parsed unambiguously without looking ahead.
437
- pub const RESERVED_FOR_TABLE_ALIAS : & [ & str ] = & [
449
+ pub const RESERVED_FOR_TABLE_ALIAS : & [ Keyword ] = & [
438
450
// Reserved as both a table and a column alias:
439
- WITH , SELECT , WHERE , GROUP , HAVING , ORDER , TOP , LIMIT , OFFSET , FETCH , UNION , EXCEPT , INTERSECT ,
451
+ Keyword :: WITH ,
452
+ Keyword :: SELECT ,
453
+ Keyword :: WHERE ,
454
+ Keyword :: GROUP ,
455
+ Keyword :: HAVING ,
456
+ Keyword :: ORDER ,
457
+ Keyword :: TOP ,
458
+ Keyword :: LIMIT ,
459
+ Keyword :: OFFSET ,
460
+ Keyword :: FETCH ,
461
+ Keyword :: UNION ,
462
+ Keyword :: EXCEPT ,
463
+ Keyword :: INTERSECT ,
440
464
// Reserved only as a table alias in the `FROM`/`JOIN` clauses:
441
- ON , JOIN , INNER , CROSS , FULL , LEFT , RIGHT , NATURAL , USING ,
465
+ Keyword :: ON ,
466
+ Keyword :: JOIN ,
467
+ Keyword :: INNER ,
468
+ Keyword :: CROSS ,
469
+ Keyword :: FULL ,
470
+ Keyword :: LEFT ,
471
+ Keyword :: RIGHT ,
472
+ Keyword :: NATURAL ,
473
+ Keyword :: USING ,
442
474
// for MSSQL-specific OUTER APPLY (seems reserved in most dialects)
443
- OUTER ,
475
+ Keyword :: OUTER ,
444
476
] ;
445
477
446
478
/// Can't be used as a column alias, so that `SELECT <expr> alias`
447
479
/// can be parsed unambiguously without looking ahead.
448
- pub const RESERVED_FOR_COLUMN_ALIAS : & [ & str ] = & [
480
+ pub const RESERVED_FOR_COLUMN_ALIAS : & [ Keyword ] = & [
449
481
// Reserved as both a table and a column alias:
450
- WITH , SELECT , WHERE , GROUP , HAVING , ORDER , LIMIT , OFFSET , FETCH , UNION , EXCEPT , INTERSECT ,
451
- // Reserved only as a column alias in the `SELECT` clause:
452
- FROM ,
482
+ Keyword :: WITH ,
483
+ Keyword :: SELECT ,
484
+ Keyword :: WHERE ,
485
+ Keyword :: GROUP ,
486
+ Keyword :: HAVING ,
487
+ Keyword :: ORDER ,
488
+ Keyword :: TOP ,
489
+ Keyword :: LIMIT ,
490
+ Keyword :: OFFSET ,
491
+ Keyword :: FETCH ,
492
+ Keyword :: UNION ,
493
+ Keyword :: EXCEPT ,
494
+ Keyword :: INTERSECT ,
495
+ // Reserved only as a column alias in the `SELECT` clause
496
+ Keyword :: FROM ,
453
497
] ;
0 commit comments