Skip to content

Commit 31cd3c7

Browse files
committed
disable ConstantPropagation for asof join
1 parent 99a0a2b commit 31cd3c7

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/ConstantPropagation.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ public Plan visitLogicalJoin(LogicalJoin<? extends Plan, ? extends Plan> join, C
238238
// update: BE not support nested loop mark join, so mark join condition need to be an equation,
239239
// but constant propagation may rewrite an equal to TRUE/FALSE/NULL, so we don't rewrite mark join condition.
240240
join = visitChildren(this, join, context);
241+
if (join.getJoinType().isAsofJoin()) {
242+
return join;
243+
}
241244

242245
List<Expression> newHashJoinConjuncts = join.getHashJoinConjuncts();
243246
List<Expression> newOtherJoinConjuncts = join.getOtherJoinConjuncts();

fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/ConstantPropagationTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.doris.nereids.trees.expressions.Cast;
2929
import org.apache.doris.nereids.trees.expressions.EqualTo;
3030
import org.apache.doris.nereids.trees.expressions.Expression;
31+
import org.apache.doris.nereids.trees.expressions.GreaterThan;
3132
import org.apache.doris.nereids.trees.expressions.IsNull;
3233
import org.apache.doris.nereids.trees.expressions.MatchAny;
3334
import org.apache.doris.nereids.trees.expressions.NamedExpression;
@@ -434,6 +435,33 @@ void testLogicalJoin() {
434435
Assertions.assertEquals(expectOtherConjuncts1, rewrittenJoin1.getOtherJoinConjuncts());
435436
}
436437

438+
@Test
439+
void testAsofJoinDisableConstantPropagation() {
440+
Set<Expression> conjunctions1 = ImmutableSet.of(
441+
new EqualTo(studentId, new IntegerLiteral(1))
442+
);
443+
Set<Expression> conjunctions2 = ImmutableSet.of(
444+
new EqualTo(scoreCid, new IntegerLiteral(2))
445+
);
446+
LogicalFilter left = new LogicalFilter<>(conjunctions1, student);
447+
LogicalFilter right = new LogicalFilter<>(conjunctions2, score);
448+
449+
List<Expression> hashConjuncts = ImmutableList.of(
450+
new EqualTo(studentId, scoreSid)
451+
);
452+
List<Expression> otherConjuncts = ImmutableList.of(
453+
new GreaterThan(studentId, studentAge)
454+
);
455+
456+
LogicalJoin asofJoin = new LogicalJoin<>(JoinType.ASOF_LEFT_INNER_JOIN, hashConjuncts, otherConjuncts, left, right, null);
457+
LogicalJoin rewrittenAsofJoin = (LogicalJoin) executor.rewriteRoot(asofJoin, jobContext);
458+
459+
// For ASOF join, constant propagation should be disabled and no rewrite should happen.
460+
Assertions.assertEquals(JoinType.ASOF_LEFT_INNER_JOIN, rewrittenAsofJoin.getJoinType());
461+
Assertions.assertEquals(hashConjuncts, rewrittenAsofJoin.getHashJoinConjuncts());
462+
Assertions.assertEquals(otherConjuncts, rewrittenAsofJoin.getOtherJoinConjuncts());
463+
}
464+
437465
private void assertRewrite(String expression, String expected) {
438466
assertRewrite(expression, expected, true);
439467
}

0 commit comments

Comments
 (0)