[fix](block rule) throw npe when use Nereids explain or fallback (#24182)
This commit is contained in:
@ -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++) {
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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;
|
||||
"""
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user