You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/06/10 11:43:51 UTC
[incubator-doris] branch master updated: [fix](planner) fix don't rewrite nested union statement bug (#8513)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new a7cca930b9 [fix](planner) fix don't rewrite nested union statement bug (#8513)
a7cca930b9 is described below
commit a7cca930b964d96b778381967b257c1aa7222519
Author: shee <13...@users.noreply.github.com>
AuthorDate: Fri Jun 10 19:43:45 2022 +0800
[fix](planner) fix don't rewrite nested union statement bug (#8513)
Issue Number: close #8512
---
.../java/org/apache/doris/analysis/StmtRewriter.java | 14 ++++++++++----
.../java/org/apache/doris/planner/PlannerTest.java | 20 +++++++++++++++++++-
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
index 42a0188a84..4f0ea9c059 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/StmtRewriter.java
@@ -321,10 +321,16 @@ public class StmtRewriter {
private static void rewriteUnionStatement(SetOperationStmt stmt, Analyzer analyzer)
throws AnalysisException {
for (SetOperationStmt.SetOperand operand : stmt.getOperands()) {
- Preconditions.checkState(operand.getQueryStmt() instanceof SelectStmt);
- QueryStmt rewrittenQueryStmt = StmtRewriter.rewriteSelectStatement(
- (SelectStmt) operand.getQueryStmt(), operand.getAnalyzer());
- operand.setQueryStmt(rewrittenQueryStmt);
+ QueryStmt queryStmt = operand.getQueryStmt();
+ if (queryStmt instanceof SelectStmt) {
+ QueryStmt rewrittenQueryStmt = rewriteSelectStatement((SelectStmt) queryStmt, operand.getAnalyzer());
+ operand.setQueryStmt(rewrittenQueryStmt);
+ } else if (queryStmt instanceof SetOperationStmt) {
+ rewriteUnionStatement((SetOperationStmt) queryStmt, operand.getAnalyzer());
+ } else {
+ throw new IllegalStateException("Rewrite union statement failed. "
+ + "Because QueryStmt is neither SelectStmt nor SetOperationStmt");
+ }
}
}
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java
index 1a4832b420..73fe9bf24b 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java
@@ -70,7 +70,13 @@ public class PlannerTest extends TestWithFeService {
+ " distributed by hash(k1)"
+ " properties('replication_num' = '1');";
- createTables(tbl1, tbl2, tbl3, tbl4);
+ String tbl5 = "create table db1.tbl5("
+ + "k1 int,"
+ + "k2 int) "
+ + "DISTRIBUTED BY HASH(k2) "
+ + "BUCKETS 3 PROPERTIES ('replication_num' = '1');";
+
+ createTables(tbl1, tbl2, tbl3, tbl4, tbl5);
}
@Test
@@ -494,4 +500,16 @@ public class PlannerTest extends TestWithFeService {
String plan = planner.getExplainString(fragments, new ExplainOptions(false, false));
Assertions.assertTrue(plan.contains("PREDICATES: `k1` = 1\n"));
}
+
+ @Test
+ public void testRewriteNestedUnionStmt() throws Exception {
+ String qSQL = "SELECT k1 FROM db1.tbl5 WHERE k1 IN "
+ + "( SELECT k1 FROM ( SELECT k1 FROM db1.tbl5 ORDER BY k2 DESC, k1 DESC LIMIT 300 INTERSECT "
+ + "(SELECT k1 FROM db1.tbl5 ORDER BY k2 DESC, k1 DESC LIMIT 9 EXCEPT SELECT k1 "
+ + "FROM db1.tbl5 ORDER BY k2 DESC, k1 DESC LIMIT 2) ) t )";
+
+ StmtExecutor stmtExecutor = new StmtExecutor(connectContext, qSQL);
+ stmtExecutor.execute();
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org