[fix](block rule) throw npe when use Nereids explain or fallback (#24182)

This commit is contained in:
morrySnow
2023-09-11 18:03:46 +08:00
committed by GitHub
parent b5227af6a1
commit a538b4922c
3 changed files with 21 additions and 14 deletions

View File

@ -81,7 +81,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;
@ -132,7 +132,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++) {

View File

@ -2569,6 +2569,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());

View File

@ -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;
"""
}
}