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]