@@ -618,18 +618,29 @@ impl<'a> Parser<'a> {
618
618
619
619
let next_token = self . next_token ( ) ;
620
620
match next_token. token {
621
- Token :: Word ( w) if self . peek_token ( ) . token == Token :: Period => {
622
- let mut id_parts: Vec < Ident > = vec ! [ w. to_ident( ) ] ;
623
-
624
- while self . consume_token ( & Token :: Period ) {
625
- let next_token = self . next_token ( ) ;
626
- match next_token. token {
627
- Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
628
- Token :: Mul => {
629
- return Ok ( WildcardExpr :: QualifiedWildcard ( ObjectName ( id_parts) ) ) ;
630
- }
631
- _ => {
632
- return self . expected ( "an identifier or a '*' after '.'" , next_token) ;
621
+ t @ ( Token :: Word ( _) | Token :: SingleQuotedString ( _) ) => {
622
+ if self . peek_token ( ) . token == Token :: Period {
623
+ let mut id_parts: Vec < Ident > = vec ! [ match t {
624
+ Token :: Word ( w) => w. to_ident( ) ,
625
+ Token :: SingleQuotedString ( s) => Ident :: with_quote( '\'' , s) ,
626
+ Token :: DoubleQuotedString ( s) => Ident :: with_quote( '"' , s) ,
627
+ _ => unreachable!( ) , // We matched above
628
+ } ] ;
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 :: SingleQuotedString ( s) => { // SQLite has single-quoted identifiers
635
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
636
+ }
637
+ Token :: Mul => {
638
+ return Ok ( WildcardExpr :: QualifiedWildcard ( ObjectName ( id_parts) ) ) ;
639
+ }
640
+ _ => {
641
+ return self
642
+ . expected ( "an identifier or a '*' after '.'" , next_token) ;
643
+ }
633
644
}
634
645
}
635
646
}
@@ -825,6 +836,9 @@ impl<'a> Parser<'a> {
825
836
let next_token = self . next_token ( ) ;
826
837
match next_token. token {
827
838
Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
839
+ Token :: SingleQuotedString ( s) => {
840
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
841
+ }
828
842
_ => {
829
843
return self
830
844
. expected ( "an identifier or a '*' after '.'" , next_token) ;
0 commit comments