You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by xi...@apache.org on 2024/07/08 03:24:42 UTC
(doris) branch master updated: [fix](Nereids) Enhance LogicalJoin input validation when push down agg (#37343)
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: 谢健 <ji...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org