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]

Reply via email to