This is an automated email from the ASF dual-hosted git repository. xiejiann pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 9d7d7b9aab6 [fix](Nereids) Enhance LogicalJoin input validation when push down agg (#37343) 9d7d7b9aab6 is described below commit 9d7d7b9aab67604ec2077753d6b3456c6371785f Author: 谢健 <jianx...@gmail.com> AuthorDate: Mon Jul 8 11:24:34 2024 +0800 [fix](Nereids) Enhance LogicalJoin input validation when push down agg (#37343) intro by #36035 This PR refines the LogicalJoin class by introducing robust input validation. Key improvements: * Implement precise checks for join input validity * Ensure consistency between input slots and output sets * Gracefully handle various join scenarios (left/right) These enhancements bolster query integrity and optimize join operations. --- .../rules/rewrite/PushDownAggThroughJoinOnPkFk.java | 14 ++++++++++++-- .../rules/rewrite/PushDownAggThroughJoinOnPkFkTest.java | 10 ++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFk.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFk.java index 827f0819637..2aeb59ae9c7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFk.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFk.java @@ -106,9 +106,19 @@ public class PushDownAggThroughJoinOnPkFk implements RewriteRuleFactory { LogicalJoin<?, ?> newJoin = innerJoinCluster .constructJoinWithPrimary(e.getKey(), subJoin, primaryAndForeign.first); if (newJoin != null && newJoin.left() == primaryAndForeign.first) { - return newJoin.withChildren(newJoin.left(), newAgg.withChildren(newJoin.right())); + newJoin = (LogicalJoin<?, ?>) newJoin + .withChildren(newJoin.left(), newAgg.withChildren(newJoin.right())); + if (Sets.union(newJoin.left().getOutputSet(), newJoin.right().getOutputSet()) + .containsAll(newJoin.getInputSlots())) { + return newJoin; + } } else if (newJoin != null && newJoin.right() == primaryAndForeign.first) { - return newJoin.withChildren(newAgg.withChildren(newJoin.left()), newJoin.right()); + newJoin = (LogicalJoin<?, ?>) newJoin + .withChildren(newAgg.withChildren(newJoin.left()), newJoin.right()); + if (Sets.union(newJoin.left().getOutputSet(), newJoin.right().getOutputSet()) + .containsAll(newJoin.getInputSlots())) { + return newJoin; + } } } return null; diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFkTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFkTest.java index 91e66790002..1ef4653e36c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFkTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownAggThroughJoinOnPkFkTest.java @@ -155,4 +155,14 @@ class PushDownAggThroughJoinOnPkFkTest extends TestWithFeService implements Memo .matches(logicalJoin(logicalAggregate(), any())) .printlnTree(); } + + @Test + void testMissSlot() { + String sql = "select count(pri.name) from pri inner join foreign_not_null on pri.name = foreign_not_null.name"; + PlanChecker.from(connectContext) + .analyze(sql) + .rewrite() + .matches(logicalAggregate(logicalProject(logicalJoin()))) + .printlnTree(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org