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: 谢健 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]