@@ -790,7 +790,7 @@ impl<'a> Tokenizer<'a> {
790
790
}
791
791
}
792
792
// PostgreSQL accepts "escape" string constants, which are an extension to the SQL standard.
793
- x @ 'e' | x @ 'E' => {
793
+ x @ 'e' | x @ 'E' if self . dialect . supports_string_escape_constant ( ) => {
794
794
let starting_loc = chars. location ( ) ;
795
795
chars. next ( ) ; // consume, to check the next char
796
796
match chars. peek ( ) {
@@ -3244,4 +3244,48 @@ mod tests {
3244
3244
] ,
3245
3245
) ;
3246
3246
}
3247
+
3248
+ #[ test]
3249
+ fn test_string_escape_constant_not_supported ( ) {
3250
+ all_dialects_where ( |dialect| !dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3251
+ "select e'...'" ,
3252
+ vec ! [
3253
+ Token :: make_keyword( "select" ) ,
3254
+ Token :: Whitespace ( Whitespace :: Space ) ,
3255
+ Token :: make_word( "e" , None ) ,
3256
+ Token :: SingleQuotedString ( "..." . to_string( ) ) ,
3257
+ ] ,
3258
+ ) ;
3259
+
3260
+ all_dialects_where ( |dialect| !dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3261
+ "select E'...'" ,
3262
+ vec ! [
3263
+ Token :: make_keyword( "select" ) ,
3264
+ Token :: Whitespace ( Whitespace :: Space ) ,
3265
+ Token :: make_word( "E" , None ) ,
3266
+ Token :: SingleQuotedString ( "..." . to_string( ) ) ,
3267
+ ] ,
3268
+ ) ;
3269
+ }
3270
+
3271
+ #[ test]
3272
+ fn test_string_escape_constant_supported ( ) {
3273
+ all_dialects_where ( |dialect| dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3274
+ "select e'\\ ''" ,
3275
+ vec ! [
3276
+ Token :: make_keyword( "select" ) ,
3277
+ Token :: Whitespace ( Whitespace :: Space ) ,
3278
+ Token :: EscapedStringLiteral ( "'" . to_string( ) ) ,
3279
+ ] ,
3280
+ ) ;
3281
+
3282
+ all_dialects_where ( |dialect| dialect. supports_string_escape_constant ( ) ) . tokenizes_to (
3283
+ "select E'\\ ''" ,
3284
+ vec ! [
3285
+ Token :: make_keyword( "select" ) ,
3286
+ Token :: Whitespace ( Whitespace :: Space ) ,
3287
+ Token :: EscapedStringLiteral ( "'" . to_string( ) ) ,
3288
+ ] ,
3289
+ ) ;
3290
+ }
3247
3291
}
0 commit comments