Retrofit Like to be foldable but LikePattern not
Original commit: elastic/x-pack-elasticsearch@0438482def
This commit is contained in:
parent
a80e5b73c9
commit
dcb71af151
|
@ -24,9 +24,14 @@ public class Like extends BinaryExpression {
|
|||
return (LikePattern) super.right();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean foldable() {
|
||||
return left().foldable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object fold() {
|
||||
Pattern p = Pattern.compile(right().fold().toString());
|
||||
Pattern p = Pattern.compile(right().asJavaRegex());
|
||||
return p.matcher(left().fold().toString()).matches();
|
||||
}
|
||||
|
||||
|
|
|
@ -69,17 +69,6 @@ public class LikePattern extends LeafExpression {
|
|||
return indexNameWildcard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean foldable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object fold() {
|
||||
// being in Java, the Java regex is returned
|
||||
return asJavaRegex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean nullable() {
|
||||
return false;
|
||||
|
|
|
@ -26,6 +26,9 @@ import org.elasticsearch.xpack.sql.expression.predicate.LessThanOrEqual;
|
|||
import org.elasticsearch.xpack.sql.expression.predicate.Not;
|
||||
import org.elasticsearch.xpack.sql.expression.predicate.Or;
|
||||
import org.elasticsearch.xpack.sql.expression.predicate.Range;
|
||||
import org.elasticsearch.xpack.sql.expression.regex.Like;
|
||||
import org.elasticsearch.xpack.sql.expression.regex.LikePattern;
|
||||
import org.elasticsearch.xpack.sql.expression.regex.RLike;
|
||||
import org.elasticsearch.xpack.sql.optimizer.Optimizer.BinaryComparisonSimplification;
|
||||
import org.elasticsearch.xpack.sql.optimizer.Optimizer.BooleanLiteralsOnTheRight;
|
||||
import org.elasticsearch.xpack.sql.optimizer.Optimizer.BooleanSimplification;
|
||||
|
@ -236,6 +239,13 @@ public class OptimizerTests extends ESTestCase {
|
|||
assertEquals(Literal.TRUE, new ConstantFolding().rule(new Not(EMPTY, Literal.FALSE)));
|
||||
}
|
||||
|
||||
public void testConstantFoldingLikes() {
|
||||
assertEquals(Literal.TRUE,
|
||||
new ConstantFolding().rule(new Like(EMPTY, Literal.of(EMPTY, "test_emp"), new LikePattern(EMPTY, "test%", (char) 0))));
|
||||
assertEquals(Literal.TRUE,
|
||||
new ConstantFolding().rule(new RLike(EMPTY, Literal.of(EMPTY, "test_emp"), Literal.of(EMPTY, "test.emp"))));
|
||||
}
|
||||
|
||||
public void testBinaryComparisonSimplification() {
|
||||
assertEquals(Literal.TRUE, new BinaryComparisonSimplification().rule(new Equals(EMPTY, L(5), L(5))));
|
||||
assertEquals(Literal.TRUE, new BinaryComparisonSimplification().rule(new GreaterThanOrEqual(EMPTY, L(5), L(5))));
|
||||
|
|
Loading…
Reference in New Issue