Skip to content

Commit 3827209

Browse files
authored
[fix](Nereids) join order is not right after sql parsing (#28721) (#29194)
pick from master PR# 28721 commit e51e94f for sql ``` t1, t2 join t3 ``` we should generate plan like: ``` t1 join (t2 join t3) ``` but we generate: ``` (t1 join t2) join t3 ``` to follow legancy planner.
1 parent 1b73bda commit 3827209

File tree

5 files changed

+573
-31
lines changed

5 files changed

+573
-31
lines changed

fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1805,7 +1805,7 @@ private LogicalPlan withRelations(LogicalPlan inputPlan, List<RelationContext> r
18051805
LogicalPlan left = inputPlan;
18061806
for (RelationContext relation : relations) {
18071807
// build left deep join tree
1808-
LogicalPlan right = visitRelation(relation);
1808+
LogicalPlan right = withJoinRelations(visitRelation(relation), relation);
18091809
left = (left == null) ? right :
18101810
new LogicalJoin<>(
18111811
JoinType.CROSS_JOIN,
@@ -1815,7 +1815,6 @@ private LogicalPlan withRelations(LogicalPlan inputPlan, List<RelationContext> r
18151815
Optional.empty(),
18161816
left,
18171817
right);
1818-
left = withJoinRelations(left, relation);
18191818
// TODO: pivot and lateral view
18201819
}
18211820
return left;

fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/DeleteCommandTest.java

+14-11
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ protected void runBeforeAll() throws Exception {
7373
public void testFromClauseDelete() throws AnalysisException {
7474
String sql = "delete from t1 a using src join t2 on src.k1 = t2.k1 where t2.k1 = a.k1";
7575
LogicalPlan parsed = new NereidsParser().parseSingle(sql);
76-
Assertions.assertTrue(parsed instanceof DeleteCommand);
76+
Assertions.assertInstanceOf(DeleteCommand.class, parsed);
7777
DeleteCommand command = ((DeleteCommand) parsed);
7878
LogicalPlan plan = command.completeQueryPlan(connectContext, command.getLogicalQuery());
7979
PlanChecker.from(connectContext, plan)
@@ -83,19 +83,22 @@ public void testFromClauseDelete() throws AnalysisException {
8383
logicalOlapTableSink(
8484
logicalProject(
8585
logicalJoin(
86-
logicalJoin(
87-
logicalProject(
88-
logicalFilter(
89-
logicalOlapScan()
86+
logicalProject(
87+
logicalJoin(
88+
logicalProject(
89+
logicalFilter(
90+
logicalOlapScan()
91+
)
92+
),
93+
logicalProject(
94+
logicalFilter(
95+
logicalOlapScan()
96+
)
9097
)
91-
),
92-
logicalProject(
93-
logicalOlapScan())
98+
)
9499
),
95100
logicalProject(
96-
logicalFilter(
97-
logicalOlapScan()
98-
)
101+
logicalOlapScan()
99102
)
100103
)
101104
)

fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/UpdateCommandTest.java

+12-18
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void runBeforeAll() throws Exception {
7272
public void testSimpleUpdate() throws AnalysisException {
7373
String sql = "update t1 set v1 = v1 + 2, v2 = v1 * 2 where k1 = 3";
7474
LogicalPlan parsed = new NereidsParser().parseSingle(sql);
75-
Assertions.assertTrue(parsed instanceof UpdateCommand);
75+
Assertions.assertInstanceOf(UpdateCommand.class, parsed);
7676
UpdateCommand command = ((UpdateCommand) parsed);
7777
LogicalPlan plan = command.completeQueryPlan(connectContext, command.getLogicalQuery());
7878
PlanChecker.from(connectContext, plan)
@@ -94,29 +94,23 @@ public void testFromClauseUpdate() throws AnalysisException {
9494
String sql = "update t1 a set v1 = t2.v1 + 2, v2 = a.v1 * 2 "
9595
+ "from src join t2 on src.k1 = t2.k1 where t2.k1 = a.k1";
9696
LogicalPlan parsed = new NereidsParser().parseSingle(sql);
97-
Assertions.assertTrue(parsed instanceof UpdateCommand);
97+
Assertions.assertInstanceOf(UpdateCommand.class, parsed);
9898
UpdateCommand command = ((UpdateCommand) parsed);
9999
LogicalPlan plan = command.completeQueryPlan(connectContext, command.getLogicalQuery());
100100
PlanChecker.from(connectContext, plan)
101101
.analyze(plan)
102-
.rewrite()
103102
.matches(
104-
logicalOlapTableSink(
105-
logicalProject(
103+
logicalFilter(
104+
logicalJoin(
105+
logicalSubQueryAlias(
106+
logicalFilter(
107+
logicalOlapScan()
108+
)
109+
),
106110
logicalJoin(
107-
logicalJoin(
108-
logicalProject(
109-
logicalFilter(
110-
logicalOlapScan()
111-
)
112-
),
113-
logicalProject(
114-
logicalOlapScan())
115-
),
116-
logicalProject(
117-
logicalFilter(
118-
logicalOlapScan()
119-
)
111+
logicalOlapScan(),
112+
logicalFilter(
113+
logicalOlapScan()
120114
)
121115
)
122116
)

0 commit comments

Comments
 (0)