Skip to content

Commit b5da650

Browse files
committed
fix: Avoid mistaken ILike to string equality optimization
1 parent 5d98d2c commit b5da650

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

datafusion/optimizer/src/simplify_expressions/expr_simplifier.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,8 +1606,9 @@ impl<S: SimplifyInfo> TreeNodeRewriter for Simplifier<'_, S> {
16061606
}))
16071607
}
16081608
Some(pattern_str)
1609-
if !pattern_str
1610-
.contains(['%', '_', escape_char].as_ref()) =>
1609+
if !like.case_insensitive
1610+
&& !pattern_str
1611+
.contains(['%', '_', escape_char].as_ref()) =>
16111612
{
16121613
// If the pattern does not contain any wildcards, we can simplify the like expression to an equality expression
16131614
// TODO: handle escape characters
@@ -4102,6 +4103,11 @@ mod tests {
41024103
assert_eq!(simplify(expr), col("c1").like(lit("a_")));
41034104
let expr = col("c1").not_like(lit("a_"));
41044105
assert_eq!(simplify(expr), col("c1").not_like(lit("a_")));
4106+
4107+
let expr = col("c1").ilike(lit("a"));
4108+
assert_eq!(simplify(expr), col("c1").ilike(lit("a")));
4109+
let expr = col("c1").not_ilike(lit("a"));
4110+
assert_eq!(simplify(expr), col("c1").not_ilike(lit("a")));
41054111
}
41064112

41074113
#[test]

0 commit comments

Comments
 (0)