Skip to content

Commit dd17183

Browse files
author
wangyanjing
committed
[CALCITE-6718] Optimize SubstitutionVisitor's splitFilter with early return and uniform simplification for equivalence checking
1 parent 0eb83b1 commit dd17183

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,11 @@ void register(MutableRel result, MutableRel query) {
297297
RexNode condition, RexNode target) {
298298
final RexBuilder rexBuilder = simplify.rexBuilder;
299299
condition = simplify.simplify(condition);
300-
target = simplify.simplify(target);
301300
RexNode condition2 = canonizeNode(rexBuilder, condition);
301+
if (target.isAlwaysTrue()) {
302+
return condition2;
303+
}
304+
target = simplify.simplify(target);
302305
RexNode target2 = canonizeNode(rexBuilder, target);
303306

304307
// First, try splitting into ORs.
@@ -322,7 +325,9 @@ void register(MutableRel result, MutableRel query) {
322325
ImmutableList.of(condition2, target2));
323326
RexNode r =
324327
canonizeNode(rexBuilder, simplify.simplifyUnknownAsFalse(x2));
325-
if (!r.isAlwaysFalse() && isEquivalent(condition2, r)) {
328+
RexNode simplifiedCond2 =
329+
canonizeNode(rexBuilder, simplify.simplifyUnknownAsFalse(condition2));
330+
if (!r.isAlwaysFalse() && isEquivalent(simplifiedCond2, r)) {
326331
List<RexNode> conjs = RelOptUtil.conjunctions(r);
327332
for (RexNode e : RelOptUtil.conjunctions(target2)) {
328333
removeAll(conjs, e);

0 commit comments

Comments
 (0)