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 <13843187+qz...@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-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org