This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch 2.0.1-rc04-patch in repository https://gitbox.apache.org/repos/asf/doris.git
commit f579fd816b7f122f23bce0a5422022b15936f434 Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Mon Sep 11 18:03:46 2023 +0800 [fix](block rule) throw npe when use Nereids explain or fallback (#24182) --- .../org/apache/doris/nereids/NereidsPlanner.java | 4 +-- .../java/org/apache/doris/qe/StmtExecutor.java | 1 + .../sql_block_rule_p0/test_sql_block_rule.groovy | 30 +++++++++++++--------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java index 4bef000639..80031a46df 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java @@ -79,7 +79,7 @@ public class NereidsPlanner extends Planner { public static final Logger LOG = LogManager.getLogger(NereidsPlanner.class); private CascadesContext cascadesContext; private final StatementContext statementContext; - private List<ScanNode> scanNodeList = null; + private final List<ScanNode> scanNodeList = Lists.newArrayList(); private DescriptorTable descTable; private Plan parsedPlan; @@ -130,7 +130,7 @@ public class NereidsPlanner extends Planner { } PlanFragment root = physicalPlanTranslator.translatePlan(physicalPlan); - scanNodeList = planTranslatorContext.getScanNodes(); + scanNodeList.addAll(planTranslatorContext.getScanNodes()); descTable = planTranslatorContext.getDescTable(); fragments = new ArrayList<>(planTranslatorContext.getPlanFragments()); for (int seq = 0; seq < fragments.size(); seq++) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 06ed93ea09..fd992555b5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -2498,6 +2498,7 @@ public class StmtExecutor { } catch (Exception e) { LOG.warn("fall back to legacy planner, because: {}", e.getMessage(), e); parsedStmt = null; + planner = null; context.getState().setNereids(false); analyzer = new Analyzer(context.getEnv(), context); analyze(context.getSessionVariable().toThrift()); diff --git a/regression-test/suites/sql_block_rule_p0/test_sql_block_rule.groovy b/regression-test/suites/sql_block_rule_p0/test_sql_block_rule.groovy index 582fa7c705..768cbcf029 100644 --- a/regression-test/suites/sql_block_rule_p0/test_sql_block_rule.groovy +++ b/regression-test/suites/sql_block_rule_p0/test_sql_block_rule.groovy @@ -174,25 +174,31 @@ suite("test_sql_block_rule") { "enable"="true"); """ - test { - sql("""SELECT * FROM a_partitioned_table_for_sql_block_rule;""", false) - - exception """sql hits sql block rule""" - + try { + test { + sql("""SELECT * FROM a_partitioned_table_for_sql_block_rule;""", false) + exception """sql hits sql block rule""" + } + } finally { + sql """ + drop SQL_BLOCK_RULE if exists test_rule_partition; + """ } sql """ CREATE SQL_BLOCK_RULE if not exists test_rule_tablet PROPERTIES ( "tablet_num" = "3", "global" = "true", "enable"="true"); """ - - test { - sql("""SELECT * FROM a_partitioned_table_for_sql_block_rule;""", false) - - exception """sql hits sql block rule""" - + try { + test { + sql("""SELECT * FROM a_partitioned_table_for_sql_block_rule;""", false) + exception """sql hits sql block rule""" + } + } finally { + sql """ + drop SQL_BLOCK_RULE if exists test_rule_tablet; + """ } - } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org