From 2be78c3a18708e388cf8bda08f5ebf4f984a457c Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Fri, 8 Nov 2024 20:16:51 +0100 Subject: [PATCH 1/2] chore: remove unnecessary test helpers --- .../simplify_expressions/expr_simplifier.rs | 150 +++++++----------- 1 file changed, 54 insertions(+), 96 deletions(-) diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs index d8ca246bb6359..6f03fff44a678 100644 --- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs +++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs @@ -2867,13 +2867,13 @@ mod tests { // single character assert_change( regex_match(col("c1"), lit("x")), - like(col("c1"), lit("%x%")), + col("c1").like(lit("%x%")), ); // single word assert_change( regex_match(col("c1"), lit("foo")), - like(col("c1"), lit("%foo%")), + col("c1").like(lit("%foo%")), ); // regular expressions that match an exact literal @@ -2963,48 +2963,48 @@ mod tests { // regular expressions that match a partial literal assert_change( regex_match(col("c1"), lit("^foo")), - like(col("c1"), lit("foo%")), + col("c1").like(lit("foo%")), ); assert_change( regex_match(col("c1"), lit("foo$")), - like(col("c1"), lit("%foo")), + col("c1").like(lit("%foo")), ); assert_change( regex_match(col("c1"), lit("^foo|bar$")), - like(col("c1"), lit("foo%")).or(like(col("c1"), lit("%bar"))), + col("c1").like(lit("foo%")).or(col("c1").like(lit("%bar"))), ); // OR-chain assert_change( regex_match(col("c1"), lit("foo|bar|baz")), - like(col("c1"), lit("%foo%")) - .or(like(col("c1"), lit("%bar%"))) - .or(like(col("c1"), lit("%baz%"))), + col("c1").like(lit("%foo%")) + .or(col("c1").like(lit("%bar%"))) + .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_match(col("c1"), lit("foo|x|baz")), - like(col("c1"), lit("%foo%")) - .or(like(col("c1"), lit("%x%"))) - .or(like(col("c1"), lit("%baz%"))), + col("c1").like(lit("%foo%")) + .or(col("c1").like(lit("%x%"))) + .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_not_match(col("c1"), lit("foo|bar|baz")), - not_like(col("c1"), lit("%foo%")) - .and(not_like(col("c1"), lit("%bar%"))) - .and(not_like(col("c1"), lit("%baz%"))), + col("c1").not_like(lit("%foo%")) + .and(col("c1").not_like(lit("%bar%"))) + .and(col("c1").not_like(lit("%baz%"))), ); // both anchored expressions (translated to equality) and unanchored assert_change( regex_match(col("c1"), lit("foo|^x$|baz")), - like(col("c1"), lit("%foo%")) + col("c1").like(lit("%foo%")) .or(col("c1").eq(lit("x"))) - .or(like(col("c1"), lit("%baz%"))), + .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_not_match(col("c1"), lit("foo|^bar$|baz")), - not_like(col("c1"), lit("%foo%")) + col("c1").not_like(lit("%foo%")) .and(col("c1").not_eq(lit("bar"))) - .and(not_like(col("c1"), lit("%baz%"))), + .and(col("c1").not_like(lit("%baz%"))), ); // Too many patterns (MAX_REGEX_ALTERNATIONS_EXPANSION) assert_no_change(regex_match(col("c1"), lit("foo|bar|baz|blarg|bozo|etc"))); @@ -3054,46 +3054,6 @@ mod tests { }) } - fn like(expr: Expr, pattern: impl Into) -> Expr { - Expr::Like(Like { - negated: false, - expr: Box::new(expr), - pattern: Box::new(pattern.into()), - escape_char: None, - case_insensitive: false, - }) - } - - fn not_like(expr: Expr, pattern: impl Into) -> Expr { - Expr::Like(Like { - negated: true, - expr: Box::new(expr), - pattern: Box::new(pattern.into()), - escape_char: None, - case_insensitive: false, - }) - } - - fn ilike(expr: Expr, pattern: impl Into) -> Expr { - Expr::Like(Like { - negated: false, - expr: Box::new(expr), - pattern: Box::new(pattern.into()), - escape_char: None, - case_insensitive: true, - }) - } - - fn not_ilike(expr: Expr, pattern: impl Into) -> Expr { - Expr::Like(Like { - negated: true, - expr: Box::new(expr), - pattern: Box::new(pattern.into()), - escape_char: None, - case_insensitive: true, - }) - } - // ------------------------------ // ----- Simplifier tests ------- // ------------------------------ @@ -3703,119 +3663,117 @@ mod tests { let null = lit(ScalarValue::Utf8(None)); // expr [NOT] [I]LIKE NULL - let expr = like(col("c1"), null.clone()); + let expr = col("c1").like(null.clone()); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_like(col("c1"), null.clone()); + let expr = col("c1").not_like(null.clone()); assert_eq!(simplify(expr), lit_bool_null()); - let expr = ilike(col("c1"), null.clone()); + let expr = col("c1").ilike(null.clone()); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_ilike(col("c1"), null.clone()); + let expr = col("c1").not_ilike(null.clone()); assert_eq!(simplify(expr), lit_bool_null()); // expr [NOT] [I]LIKE '%' - let expr = like(col("c1"), lit("%")); + let expr = col("c1").like(lit("%")); assert_eq!(simplify(expr), if_not_null(col("c1"), true)); - let expr = not_like(col("c1"), lit("%")); + let expr = col("c1").not_like(lit("%")); assert_eq!(simplify(expr), if_not_null(col("c1"), false)); - let expr = ilike(col("c1"), lit("%")); + let expr = col("c1").ilike(lit("%")); assert_eq!(simplify(expr), if_not_null(col("c1"), true)); - let expr = not_ilike(col("c1"), lit("%")); + let expr = col("c1").not_ilike(lit("%")); assert_eq!(simplify(expr), if_not_null(col("c1"), false)); // expr [NOT] [I]LIKE '%%' - let expr = like(col("c1"), lit("%%")); + let expr = col("c1").like(lit("%%")); assert_eq!(simplify(expr), if_not_null(col("c1"), true)); - let expr = not_like(col("c1"), lit("%%")); + let expr = col("c1").not_like(lit("%%")); assert_eq!(simplify(expr), if_not_null(col("c1"), false)); - let expr = ilike(col("c1"), lit("%%")); + let expr = col("c1").ilike(lit("%%")); assert_eq!(simplify(expr), if_not_null(col("c1"), true)); - let expr = not_ilike(col("c1"), lit("%%")); + let expr = col("c1").not_ilike(lit("%%")); assert_eq!(simplify(expr), if_not_null(col("c1"), false)); // not_null_expr [NOT] [I]LIKE '%' - let expr = like(col("c1_non_null"), lit("%")); + let expr = col("c1_non_null").like(lit("%")); assert_eq!(simplify(expr), lit(true)); - let expr = not_like(col("c1_non_null"), lit("%")); + let expr = col("c1_non_null").not_like(lit("%")); assert_eq!(simplify(expr), lit(false)); - let expr = ilike(col("c1_non_null"), lit("%")); + let expr = col("c1_non_null").ilike(lit("%")); assert_eq!(simplify(expr), lit(true)); - let expr = not_ilike(col("c1_non_null"), lit("%")); + let expr = col("c1_non_null").not_ilike(lit("%")); assert_eq!(simplify(expr), lit(false)); // not_null_expr [NOT] [I]LIKE '%%' - let expr = like(col("c1_non_null"), lit("%%")); + let expr = col("c1_non_null").like(lit("%%")); assert_eq!(simplify(expr), lit(true)); - let expr = not_like(col("c1_non_null"), lit("%%")); + let expr = col("c1_non_null").not_like(lit("%%")); assert_eq!(simplify(expr), lit(false)); - let expr = ilike(col("c1_non_null"), lit("%%")); + let expr = col("c1_non_null").ilike(lit("%%")); assert_eq!(simplify(expr), lit(true)); - let expr = not_ilike(col("c1_non_null"), lit("%%")); + let expr = col("c1_non_null").not_ilike(lit("%%")); assert_eq!(simplify(expr), lit(false)); // null_constant [NOT] [I]LIKE '%' - let expr = like(null.clone(), lit("%")); + let expr = null.clone().like(lit("%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_like(null.clone(), lit("%")); + let expr = null.clone().not_like(lit("%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = ilike(null.clone(), lit("%")); + let expr = null.clone().ilike(lit("%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_ilike(null, lit("%")); + let expr = null.clone().not_ilike(lit("%")); assert_eq!(simplify(expr), lit_bool_null()); // null_constant [NOT] [I]LIKE '%%' - let null = lit(ScalarValue::Utf8(None)); - let expr = like(null.clone(), lit("%%")); + let expr = null.clone().like(lit("%%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_like(null.clone(), lit("%%")); + let expr = null.clone().not_like(lit("%%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = ilike(null.clone(), lit("%%")); + let expr = null.clone().ilike(lit("%%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_ilike(null, lit("%%")); + let expr = null.clone().not_ilike(lit("%%")); assert_eq!(simplify(expr), lit_bool_null()); // null_constant [NOT] [I]LIKE 'a%' - let null = lit(ScalarValue::Utf8(None)); - let expr = like(null.clone(), lit("a%")); + let expr = null.clone().like(lit("a%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_like(null.clone(), lit("a%")); + let expr = null.clone().not_like(lit("a%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = ilike(null.clone(), lit("a%")); + let expr = null.clone().ilike(lit("a%")); assert_eq!(simplify(expr), lit_bool_null()); - let expr = not_ilike(null, lit("a%")); + let expr = null.clone().not_ilike(lit("a%")); assert_eq!(simplify(expr), lit_bool_null()); // expr [NOT] [I]LIKE with pattern without wildcards - let expr = like(col("c1"), lit("a")); + let expr = col("c1").like(lit("a")); assert_eq!(simplify(expr), col("c1").eq(lit("a"))); - let expr = not_like(col("c1"), lit("a")); + let expr = col("c1").not_like(lit("a")); assert_eq!(simplify(expr), col("c1").not_eq(lit("a"))); - let expr = like(col("c1"), lit("a_")); + let expr = col("c1").like(lit("a_")); assert_eq!(simplify(expr), col("c1").like(lit("a_"))); - let expr = not_like(col("c1"), lit("a_")); + let expr = col("c1").not_like(lit("a_")); assert_eq!(simplify(expr), col("c1").not_like(lit("a_"))); } From 9e40e7d54006b35827724857466524f043e2c310 Mon Sep 17 00:00:00 2001 From: Piotr Findeisen Date: Sat, 16 Nov 2024 18:50:26 +0100 Subject: [PATCH 2/2] cargo fmt --- .../simplify_expressions/expr_simplifier.rs | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs index 6f03fff44a678..6564e722eaf89 100644 --- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs +++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs @@ -2865,10 +2865,7 @@ mod tests { ); // single character - assert_change( - regex_match(col("c1"), lit("x")), - col("c1").like(lit("%x%")), - ); + assert_change(regex_match(col("c1"), lit("x")), col("c1").like(lit("%x%"))); // single word assert_change( @@ -2977,32 +2974,37 @@ mod tests { // OR-chain assert_change( regex_match(col("c1"), lit("foo|bar|baz")), - col("c1").like(lit("%foo%")) + col("c1") + .like(lit("%foo%")) .or(col("c1").like(lit("%bar%"))) .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_match(col("c1"), lit("foo|x|baz")), - col("c1").like(lit("%foo%")) + col("c1") + .like(lit("%foo%")) .or(col("c1").like(lit("%x%"))) .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_not_match(col("c1"), lit("foo|bar|baz")), - col("c1").not_like(lit("%foo%")) + col("c1") + .not_like(lit("%foo%")) .and(col("c1").not_like(lit("%bar%"))) .and(col("c1").not_like(lit("%baz%"))), ); // both anchored expressions (translated to equality) and unanchored assert_change( regex_match(col("c1"), lit("foo|^x$|baz")), - col("c1").like(lit("%foo%")) + col("c1") + .like(lit("%foo%")) .or(col("c1").eq(lit("x"))) .or(col("c1").like(lit("%baz%"))), ); assert_change( regex_not_match(col("c1"), lit("foo|^bar$|baz")), - col("c1").not_like(lit("%foo%")) + col("c1") + .not_like(lit("%foo%")) .and(col("c1").not_eq(lit("bar"))) .and(col("c1").not_like(lit("%baz%"))), );