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