@@ -985,7 +985,7 @@ impl<'a> Tokenizer<'a> {
985
985
}
986
986
}
987
987
// PostgreSQL accepts "escape" string constants, which are an extension to the SQL standard.
988
- x @ 'e' | x @ 'E' => {
988
+ x @ 'e' | x @ 'E' if self . dialect . supports_string_escape_constant ( ) => {
989
989
let starting_loc = chars. location ( ) ;
990
990
chars. next ( ) ; // consume, to check the next char
991
991
match chars. peek ( ) {
@@ -3573,4 +3573,48 @@ mod tests {
3573
3573
] ,
3574
3574
) ;
3575
3575
}
3576
+
3577
+ #[ test]
3578
+ fn test_string_escape_constant_not_supported ( ) {
3579
+ all_dialects_where ( |dialect| !dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3580
+ "select e'...'" ,
3581
+ vec ! [
3582
+ Token :: make_keyword( "select" ) ,
3583
+ Token :: Whitespace ( Whitespace :: Space ) ,
3584
+ Token :: make_word( "e" , None ) ,
3585
+ Token :: SingleQuotedString ( "..." . to_string( ) ) ,
3586
+ ] ,
3587
+ ) ;
3588
+
3589
+ all_dialects_where ( |dialect| !dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3590
+ "select E'...'" ,
3591
+ vec ! [
3592
+ Token :: make_keyword( "select" ) ,
3593
+ Token :: Whitespace ( Whitespace :: Space ) ,
3594
+ Token :: make_word( "E" , None ) ,
3595
+ Token :: SingleQuotedString ( "..." . to_string( ) ) ,
3596
+ ] ,
3597
+ ) ;
3598
+ }
3599
+
3600
+ #[ test]
3601
+ fn test_string_escape_constant_supported ( ) {
3602
+ all_dialects_where ( |dialect| dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3603
+ "select e'\\ ''" ,
3604
+ vec ! [
3605
+ Token :: make_keyword( "select" ) ,
3606
+ Token :: Whitespace ( Whitespace :: Space ) ,
3607
+ Token :: EscapedStringLiteral ( "'" . to_string( ) ) ,
3608
+ ] ,
3609
+ ) ;
3610
+
3611
+ all_dialects_where ( |dialect| dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3612
+ "select E'\\ ''" ,
3613
+ vec ! [
3614
+ Token :: make_keyword( "select" ) ,
3615
+ Token :: Whitespace ( Whitespace :: Space ) ,
3616
+ Token :: EscapedStringLiteral ( "'" . to_string( ) ) ,
3617
+ ] ,
3618
+ ) ;
3619
+ }
3576
3620
}
0 commit comments