@@ -10387,15 +10387,8 @@ fn parse_with_recursion_limit() {
1038710387
1038810388#[ test]
1038910389fn parse_escaped_string_with_unescape ( ) {
10390- fn assert_mysql_query_value ( sql : & str , quoted : & str ) {
10391- let stmt = TestedDialects :: new ( vec ! [
10392- Box :: new( MySqlDialect { } ) ,
10393- Box :: new( BigQueryDialect { } ) ,
10394- Box :: new( SnowflakeDialect { } ) ,
10395- ] )
10396- . one_statement_parses_to ( sql, "" ) ;
10397-
10398- match stmt {
10390+ fn assert_mysql_query_value ( dialects : & TestedDialects , sql : & str , quoted : & str ) {
10391+ match dialects. one_statement_parses_to ( sql, "" ) {
1039910392 Statement :: Query ( query) => match * query. body {
1040010393 SetExpr :: Select ( value) => {
1040110394 let expr = expr_from_projection ( only ( & value. projection ) ) ;
@@ -10411,17 +10404,38 @@ fn parse_escaped_string_with_unescape() {
1041110404 _ => unreachable ! ( ) ,
1041210405 } ;
1041310406 }
10407+
10408+ let escaping_dialects =
10409+ & all_dialects_where ( |dialect| dialect. supports_string_literal_backslash_escape ( ) ) ;
10410+ let no_wildcard_exception = & all_dialects_where ( |dialect| {
10411+ dialect. supports_string_literal_backslash_escape ( ) && !dialect. ignores_wildcard_escapes ( )
10412+ } ) ;
10413+ let with_wildcard_exception = & all_dialects_where ( |dialect| {
10414+ dialect. supports_string_literal_backslash_escape ( ) && dialect. ignores_wildcard_escapes ( )
10415+ } ) ;
10416+
1041410417 let sql = r"SELECT 'I\'m fine'" ;
10415- assert_mysql_query_value ( sql, "I'm fine" ) ;
10418+ assert_mysql_query_value ( escaping_dialects , sql, "I'm fine" ) ;
1041610419
1041710420 let sql = r#"SELECT 'I''m fine'"# ;
10418- assert_mysql_query_value ( sql, "I'm fine" ) ;
10421+ assert_mysql_query_value ( escaping_dialects , sql, "I'm fine" ) ;
1041910422
1042010423 let sql = r#"SELECT 'I\"m fine'"# ;
10421- assert_mysql_query_value ( sql, "I\" m fine" ) ;
10424+ assert_mysql_query_value ( escaping_dialects , sql, "I\" m fine" ) ;
1042210425
1042310426 let sql = r"SELECT 'Testing: \0 \\ \% \_ \b \n \r \t \Z \a \h \ '" ;
10424- assert_mysql_query_value ( sql, "Testing: \0 \\ % _ \u{8} \n \r \t \u{1a} \u{7} h " ) ;
10427+ assert_mysql_query_value (
10428+ no_wildcard_exception,
10429+ sql,
10430+ "Testing: \0 \\ % _ \u{8} \n \r \t \u{1a} \u{7} h " ,
10431+ ) ;
10432+
10433+ // check MySQL doesn't remove backslash from escaped LIKE wildcards
10434+ assert_mysql_query_value (
10435+ with_wildcard_exception,
10436+ sql,
10437+ "Testing: \0 \\ \\ % \\ _ \u{8} \n \r \t \u{1a} \u{7} h " ,
10438+ ) ;
1042510439}
1042610440
1042710441#[ test]
0 commit comments