@@ -624,18 +624,29 @@ impl<'a> Parser<'a> {
624
624
625
625
let next_token = self . next_token ( ) ;
626
626
match next_token. token {
627
- Token :: Word ( w) if self . peek_token ( ) . token == Token :: Period => {
628
- let mut id_parts: Vec < Ident > = vec ! [ w. to_ident( ) ] ;
629
-
630
- while self . consume_token ( & Token :: Period ) {
631
- let next_token = self . next_token ( ) ;
632
- match next_token. token {
633
- Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
634
- Token :: Mul => {
635
- return Ok ( WildcardExpr :: QualifiedWildcard ( ObjectName ( id_parts) ) ) ;
636
- }
637
- _ => {
638
- return self . expected ( "an identifier or a '*' after '.'" , next_token) ;
627
+ t @ ( Token :: Word ( _) | Token :: SingleQuotedString ( _) ) => {
628
+ if self . peek_token ( ) . token == Token :: Period {
629
+ let mut id_parts: Vec < Ident > = vec ! [ match t {
630
+ Token :: Word ( w) => w. to_ident( ) ,
631
+ Token :: SingleQuotedString ( s) => Ident :: with_quote( '\'' , s) ,
632
+ _ => unreachable!( ) , // We matched above
633
+ } ] ;
634
+
635
+ while self . consume_token ( & Token :: Period ) {
636
+ let next_token = self . next_token ( ) ;
637
+ match next_token. token {
638
+ Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
639
+ Token :: SingleQuotedString ( s) => {
640
+ // SQLite has single-quoted identifiers
641
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
642
+ }
643
+ Token :: Mul => {
644
+ return Ok ( WildcardExpr :: QualifiedWildcard ( ObjectName ( id_parts) ) ) ;
645
+ }
646
+ _ => {
647
+ return self
648
+ . expected ( "an identifier or a '*' after '.'" , next_token) ;
649
+ }
639
650
}
640
651
}
641
652
}
@@ -834,6 +845,9 @@ impl<'a> Parser<'a> {
834
845
let next_token = self . next_token ( ) ;
835
846
match next_token. token {
836
847
Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
848
+ Token :: SingleQuotedString ( s) => {
849
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
850
+ }
837
851
_ => {
838
852
return self
839
853
. expected ( "an identifier or a '*' after '.'" , next_token) ;
0 commit comments