@@ -618,18 +618,30 @@ 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) => {
635
+ // SQLite has single-quoted identifiers
636
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
637
+ }
638
+ Token :: Mul => {
639
+ return Ok ( WildcardExpr :: QualifiedWildcard ( ObjectName ( id_parts) ) ) ;
640
+ }
641
+ _ => {
642
+ return self
643
+ . expected ( "an identifier or a '*' after '.'" , next_token) ;
644
+ }
633
645
}
634
646
}
635
647
}
@@ -825,6 +837,9 @@ impl<'a> Parser<'a> {
825
837
let next_token = self . next_token ( ) ;
826
838
match next_token. token {
827
839
Token :: Word ( w) => id_parts. push ( w. to_ident ( ) ) ,
840
+ Token :: SingleQuotedString ( s) => {
841
+ id_parts. push ( Ident :: with_quote ( '\'' , s) )
842
+ }
828
843
_ => {
829
844
return self
830
845
. expected ( "an identifier or a '*' after '.'" , next_token) ;
0 commit comments