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

Reply via email to