This is an automated email from the ASF dual-hosted git repository.
comphead pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new f52d9b95a4 fix: Avoid mistaken ILike to string equality optimization
(#15836)
f52d9b95a4 is described below
commit f52d9b95a4882af28fe70b3ff5d56b5ef18f4d0f
Author: Sam Hughes <[email protected]>
AuthorDate: Mon Apr 28 19:55:45 2025 -0700
fix: Avoid mistaken ILike to string equality optimization (#15836)
* fix: Avoid mistaken ILike to string equality optimization
* test: ILIKE without wildcards
---
.../optimizer/src/simplify_expressions/expr_simplifier.rs | 10 ++++++++--
datafusion/sqllogictest/test_files/strings.slt | 6 ++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
index b1c03dcd00..ad4fbb7bde 100644
--- a/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
+++ b/datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs
@@ -1606,8 +1606,9 @@ impl<S: SimplifyInfo> TreeNodeRewriter for Simplifier<'_,
S> {
}))
}
Some(pattern_str)
- if !pattern_str
- .contains(['%', '_',
escape_char].as_ref()) =>
+ if !like.case_insensitive
+ && !pattern_str
+ .contains(['%', '_',
escape_char].as_ref()) =>
{
// If the pattern does not contain any
wildcards, we can simplify the like expression to an equality expression
// TODO: handle escape characters
@@ -4102,6 +4103,11 @@ mod tests {
assert_eq!(simplify(expr), col("c1").like(lit("a_")));
let expr = col("c1").not_like(lit("a_"));
assert_eq!(simplify(expr), col("c1").not_like(lit("a_")));
+
+ let expr = col("c1").ilike(lit("a"));
+ assert_eq!(simplify(expr), col("c1").ilike(lit("a")));
+ let expr = col("c1").not_ilike(lit("a"));
+ assert_eq!(simplify(expr), col("c1").not_ilike(lit("a")));
}
#[test]
diff --git a/datafusion/sqllogictest/test_files/strings.slt
b/datafusion/sqllogictest/test_files/strings.slt
index 81b8f4b2da..9fa453fa02 100644
--- a/datafusion/sqllogictest/test_files/strings.slt
+++ b/datafusion/sqllogictest/test_files/strings.slt
@@ -115,6 +115,12 @@ p1
p1e1
p1m1e1
+query T rowsort
+SELECT s FROM test WHERE s ILIKE 'p1';
+----
+P1
+p1
+
# NOT ILIKE
query T rowsort
SELECT s FROM test WHERE s NOT ILIKE 'p1%';
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]