@@ -10390,15 +10390,8 @@ fn parse_with_recursion_limit() {
1039010390
1039110391#[ test]
1039210392fn parse_escaped_string_with_unescape ( ) {
10393- fn assert_mysql_query_value ( sql : & str , quoted : & str ) {
10394- let stmt = TestedDialects :: new ( vec ! [
10395- Box :: new( MySqlDialect { } ) ,
10396- Box :: new( BigQueryDialect { } ) ,
10397- Box :: new( SnowflakeDialect { } ) ,
10398- ] )
10399- . one_statement_parses_to ( sql, "" ) ;
10400-
10401- match stmt {
10393+ fn assert_mysql_query_value ( dialects : & TestedDialects , sql : & str , quoted : & str ) {
10394+ match dialects. one_statement_parses_to ( sql, "" ) {
1040210395 Statement :: Query ( query) => match * query. body {
1040310396 SetExpr :: Select ( value) => {
1040410397 let expr = expr_from_projection ( only ( & value. projection ) ) ;
@@ -10414,17 +10407,38 @@ fn parse_escaped_string_with_unescape() {
1041410407 _ => unreachable ! ( ) ,
1041510408 } ;
1041610409 }
10410+
10411+ let escaping_dialects =
10412+ & all_dialects_where ( |dialect| dialect. supports_string_literal_backslash_escape ( ) ) ;
10413+ let no_wildcard_exception = & all_dialects_where ( |dialect| {
10414+ dialect. supports_string_literal_backslash_escape ( ) && !dialect. ignores_wildcard_escapes ( )
10415+ } ) ;
10416+ let with_wildcard_exception = & all_dialects_where ( |dialect| {
10417+ dialect. supports_string_literal_backslash_escape ( ) && dialect. ignores_wildcard_escapes ( )
10418+ } ) ;
10419+
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 'I\"m fine'"# ;
10424- assert_mysql_query_value ( sql, "I\" m fine" ) ;
10427+ assert_mysql_query_value ( escaping_dialects , sql, "I\" m fine" ) ;
1042510428
1042610429 let sql = r"SELECT 'Testing: \0 \\ \% \_ \b \n \r \t \Z \a \h \ '" ;
10427- assert_mysql_query_value ( sql, "Testing: \0 \\ % _ \u{8} \n \r \t \u{1a} \u{7} h " ) ;
10430+ assert_mysql_query_value (
10431+ no_wildcard_exception,
10432+ sql,
10433+ "Testing: \0 \\ % _ \u{8} \n \r \t \u{1a} \u{7} h " ,
10434+ ) ;
10435+
10436+ // check MySQL doesn't remove backslash from escaped LIKE wildcards
10437+ assert_mysql_query_value (
10438+ with_wildcard_exception,
10439+ sql,
10440+ "Testing: \0 \\ \\ % \\ _ \u{8} \n \r \t \u{1a} \u{7} h " ,
10441+ ) ;
1042810442}
1042910443
1043010444#[ test]
0 commit comments