This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 07d30d46ff1 [fix](planner)need call materializeSrcExpr for 
materialized slots in join node (#25204) (#31016)
07d30d46ff1 is described below

commit 07d30d46ff13ff7622fea4074ff14d37763c4081
Author: Mingyu Chen <[email protected]>
AuthorDate: Fri Feb 9 17:44:02 2024 +0800

    [fix](planner)need call materializeSrcExpr for materialized slots in join 
node (#25204) (#31016)
    
    bp #25204
    Co-authored-by: starocean999 
<[email protected]>
---
 .../src/main/java/org/apache/doris/analysis/SlotDescriptor.java   | 1 +
 .../src/main/java/org/apache/doris/planner/JoinNodeBase.java      | 7 +------
 .../src/test/java/org/apache/doris/planner/QueryPlanTest.java     | 8 +++-----
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotDescriptor.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotDescriptor.java
index b68ea317782..9ce0ea7109f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotDescriptor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotDescriptor.java
@@ -94,6 +94,7 @@ public class SlotDescriptor {
         this.isAgg = false;
         this.stats = src.stats;
         this.type = src.type;
+        this.sourceExprs.add(new SlotRef(src));
     }
 
     public boolean isMultiRef() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java
index 3b0f3017099..28c47b89790 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JoinNodeBase.java
@@ -168,9 +168,6 @@ public abstract class JoinNodeBase extends PlanNode {
                 boolean needSetToNullable =
                         getChild(0) instanceof JoinNodeBase && 
analyzer.isOuterJoined(leftTupleDesc.getId());
                 for (SlotDescriptor leftSlotDesc : leftTupleDesc.getSlots()) {
-                    if (!isMaterializedByChild(leftSlotDesc, 
getChild(0).getOutputSmap())) {
-                        continue;
-                    }
                     SlotDescriptor outputSlotDesc =
                             
analyzer.getDescTbl().copySlotDescriptor(vOutputTupleDesc, leftSlotDesc);
                     if (leftNullable) {
@@ -191,9 +188,6 @@ public abstract class JoinNodeBase extends PlanNode {
                 boolean needSetToNullable =
                         getChild(1) instanceof JoinNodeBase && 
analyzer.isOuterJoined(rightTupleDesc.getId());
                 for (SlotDescriptor rightSlotDesc : rightTupleDesc.getSlots()) 
{
-                    if (!isMaterializedByChild(rightSlotDesc, 
getChild(1).getOutputSmap())) {
-                        continue;
-                    }
                     SlotDescriptor outputSlotDesc =
                             
analyzer.getDescTbl().copySlotDescriptor(vOutputTupleDesc, rightSlotDesc);
                     if (rightNullable) {
@@ -226,6 +220,7 @@ public abstract class JoinNodeBase extends PlanNode {
                 
rSlotRef.getDesc().setIsMaterialized(lSlotRef.getDesc().isMaterialized());
             } else {
                 rSlotRef.getDesc().setIsMaterialized(true);
+                rSlotRef.materializeSrcExpr();
             }
         }
 
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
index ce58afd035e..a18abcd0cdf 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
@@ -746,7 +746,7 @@ public class QueryPlanTest extends TestWithFeService {
                 + "left join join2 on join1.id = join2.id\n"
                 + "and join1.id > 1;";
         String explainString = getSQLPlanOrErrorMsg("explain " + sql);
-        Assert.assertTrue(explainString.contains("other join predicates: <slot 
12> > 1"));
+        Assert.assertTrue(explainString.contains("other join predicates: <slot 
12> <slot 0> > 1"));
         Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 
1"));
 
         /*
@@ -833,7 +833,7 @@ public class QueryPlanTest extends TestWithFeService {
                 + "left anti join join2 on join1.id = join2.id\n"
                 + "and join1.id > 1;";
         explainString = getSQLPlanOrErrorMsg("explain " + sql);
-        Assert.assertTrue(explainString.contains("other join predicates: <slot 
7> > 1"));
+        Assert.assertTrue(explainString.contains("other join predicates: <slot 
7> <slot 0> > 1"));
         Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 
1"));
 
         // test semi join, left table join predicate, only push to left table
@@ -1523,7 +1523,6 @@ public class QueryPlanTest extends TestWithFeService {
     public void testEmptyNode() throws Exception {
         connectContext.setDatabase("default_cluster:test");
         String emptyNode = "EMPTYSET";
-        String denseRank = "dense_rank";
 
         List<String> sqls = Lists.newArrayList();
         sqls.add("explain select * from baseall limit 0");
@@ -1542,7 +1541,6 @@ public class QueryPlanTest extends TestWithFeService {
         for (String sql : sqls) {
             String explainString = getSQLPlanOrErrorMsg(sql);
             Assert.assertTrue(explainString.contains(emptyNode));
-            Assert.assertFalse(explainString.contains(denseRank));
         }
     }
 
@@ -2056,7 +2054,7 @@ public class QueryPlanTest extends TestWithFeService {
         Assert.assertFalse(explainString.contains("OUTPUT EXPRS:\n    3\n    
4"));
         System.out.println(explainString);
         Assert.assertTrue(explainString.contains(
-                "OUTPUT EXPRS:\n" + "    CAST(<slot 4> AS INT)\n" + "    
CAST(<slot 5> AS INT)"));
+                "OUTPUT EXPRS:\n" + "    CAST(<slot 4> <slot 2> 3 AS INT)\n" + 
"    CAST(<slot 5> <slot 3> 4 AS INT)"));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to