From 536b666c5d92e2cca14e6238372c4c2dd47dfdea Mon Sep 17 00:00:00 2001 From: morrySnow Date: Mon, 18 Dec 2023 18:13:25 +0800 Subject: [PATCH] [fix](Nereids) explain should fallback too if Nereids is not enable (#28475) pick from master PR #28475 commit b50bc0d2c902856f6727c5301d256ca6a561f8a3 --- .../trees/plans/commands/DeleteCommand.java | 8 +++++ .../commands/InsertIntoTableCommand.java | 8 +++++ .../trees/plans/commands/UpdateCommand.java | 8 +++++ .../doris/nereids/util/ReadLockTest.java | 32 +++++++++++-------- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteCommand.java index fa6fd629008389..ccaadd7cd9ccd3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/DeleteCommand.java @@ -130,6 +130,14 @@ public LogicalPlan getLogicalQuery() { @Override public Plan getExplainPlan(ConnectContext ctx) { + if (!ctx.getSessionVariable().isEnableNereidsDML()) { + try { + ctx.getSessionVariable().enableFallbackToOriginalPlannerOnce(); + } catch (Exception e) { + throw new AnalysisException("failed to set fallback to original planner to true", e); + } + throw new AnalysisException("Nereids DML is disabled, will try to fall back to the original planner"); + } return completeQueryPlan(ctx, logicalQuery); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java index 33bbfe8d546aa4..0ff6099163c69a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/InsertIntoTableCommand.java @@ -160,6 +160,14 @@ public void run(ConnectContext ctx, StmtExecutor executor) throws Exception { @Override public Plan getExplainPlan(ConnectContext ctx) { + if (!ctx.getSessionVariable().isEnableNereidsDML()) { + try { + ctx.getSessionVariable().enableFallbackToOriginalPlannerOnce(); + } catch (Exception e) { + throw new AnalysisException("failed to set fallback to original planner to true", e); + } + throw new AnalysisException("Nereids DML is disabled, will try to fall back to the original planner"); + } return this.logicalQuery; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/UpdateCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/UpdateCommand.java index 6236ba019b5f9b..92f3fb21ee5414 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/UpdateCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/UpdateCommand.java @@ -148,6 +148,14 @@ private void checkTable(ConnectContext ctx) throws AnalysisException { @Override public Plan getExplainPlan(ConnectContext ctx) throws AnalysisException { + if (!ctx.getSessionVariable().isEnableNereidsDML()) { + try { + ctx.getSessionVariable().enableFallbackToOriginalPlannerOnce(); + } catch (Exception e) { + throw new AnalysisException("failed to set fallback to original planner to true", e); + } + throw new AnalysisException("Nereids DML is disabled, will try to fall back to the original planner"); + } return completeQueryPlan(ctx, logicalQuery); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java index 58212c2d3ba5d2..c24a846a1bb245 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/ReadLockTest.java @@ -108,20 +108,26 @@ public void testScalarSubQuery() { } @Test - public void testInserInto() { + public void testInsertInto() { String sql = "INSERT INTO supplier(s_suppkey) SELECT lo_orderkey FROM lineorder"; StatementContext statementContext = MemoTestUtils.createStatementContext(connectContext, sql); - InsertIntoTableCommand insertIntoTableCommand = (InsertIntoTableCommand) parser.parseSingle(sql); - NereidsPlanner planner = new NereidsPlanner(statementContext); - planner.plan( - (LogicalPlan) insertIntoTableCommand.getExplainPlan(connectContext), - PhysicalProperties.ANY - ); - CascadesContext cascadesContext = planner.getCascadesContext(); - List f = cascadesContext.getTables(); - Assertions.assertEquals(2, f.size()); - Set tableNames = f.stream().map(TableIf::getName).collect(Collectors.toSet()); - Assertions.assertTrue(tableNames.contains("supplier")); - Assertions.assertTrue(tableNames.contains("lineorder")); + boolean originalDML = connectContext.getSessionVariable().enableNereidsDML; + connectContext.getSessionVariable().enableNereidsDML = true; + try { + InsertIntoTableCommand insertIntoTableCommand = (InsertIntoTableCommand) parser.parseSingle(sql); + NereidsPlanner planner = new NereidsPlanner(statementContext); + planner.plan( + (LogicalPlan) insertIntoTableCommand.getExplainPlan(connectContext), + PhysicalProperties.ANY + ); + CascadesContext cascadesContext = planner.getCascadesContext(); + List f = cascadesContext.getTables(); + Assertions.assertEquals(2, f.size()); + Set tableNames = f.stream().map(TableIf::getName).collect(Collectors.toSet()); + Assertions.assertTrue(tableNames.contains("supplier")); + Assertions.assertTrue(tableNames.contains("lineorder")); + } finally { + connectContext.getSessionVariable().enableNereidsDML = originalDML; + } } }