From 7aa063c1f307cd09f4c681b1bdb674fc7344b9bf Mon Sep 17 00:00:00 2001 From: starocean999 <40539150+starocean999@users.noreply.github.com> Date: Wed, 22 Feb 2023 20:23:00 +0800 Subject: [PATCH] [fix](planner) bucket shuffle join is not recognized if the first table is a subquery (#16985) consider sql select * from (select * from test_1) a inner join (select * from test_2) b on a.id = b.id inner join (select * from test_3) c on a.id = c.id Because a.id is from a subquery, to find its source table, need use function getSrcSlotRef(). --- .../java/org/apache/doris/planner/PlanNode.java | 3 +++ .../correctness_p0/test_bucket_shuffle_join.groovy | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index 08f59353af..aa57d08bc7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -965,6 +965,9 @@ public abstract class PlanNode extends TreeNode implements PlanStats { } public SlotRef findSrcSlotRef(SlotRef slotRef) { + if (slotRef.getSrcSlotRef() != null) { + slotRef = slotRef.getSrcSlotRef(); + } if (slotRef.getTable() instanceof OlapTable) { return slotRef; } diff --git a/regression-test/suites/correctness_p0/test_bucket_shuffle_join.groovy b/regression-test/suites/correctness_p0/test_bucket_shuffle_join.groovy index febd57a353..429d4f18ad 100644 --- a/regression-test/suites/correctness_p0/test_bucket_shuffle_join.groovy +++ b/regression-test/suites/correctness_p0/test_bucket_shuffle_join.groovy @@ -78,4 +78,17 @@ suite("test_bucket_shuffle_join") { contains "4:VHASH JOIN\n | join op: INNER JOIN(BUCKET_SHUFFLE)" contains "2:VHASH JOIN\n | join op: INNER JOIN(BUCKET_SHUFFLE)" } + + explain { + sql("""select a.id,a.name,b.id,b.name + from (select * from test_colo1) a + inner join + (select * from test_colo2) b + on a.id = b.id and a.name = b.name and a.name = b.name + inner join + (select * from test_colo3) c + on a.id = c.id and a.name = c.name and a.name = c.name""") + contains "4:VHASH JOIN\n | join op: INNER JOIN(BUCKET_SHUFFLE)" + contains "2:VHASH JOIN\n | join op: INNER JOIN(BUCKET_SHUFFLE)" + } }