diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index 6d62ab2889b17e..8a84c1a26732ae 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -17,6 +17,7 @@ package org.apache.doris.planner; +import com.google.common.base.Predicates; import org.apache.doris.analysis.Analyzer; import org.apache.doris.analysis.Expr; import org.apache.doris.analysis.ExprSubstitutionMap; @@ -223,6 +224,16 @@ public void unsetLimit() { limit = -1; } + protected List getAllScanTupleIds() { + List tupleIds = Lists.newArrayList(); + List scanNodes = Lists.newArrayList(); + collectAll(Predicates.instanceOf(ScanNode.class), scanNodes); + for(ScanNode node: scanNodes) { + tupleIds.addAll(node.getTupleIds()); + } + return tupleIds; + } + public ArrayList getTupleIds() { Preconditions.checkState(tupleIds != null); return tupleIds; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java index 8123c3f0688c27..fd81c33facf3c9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java @@ -71,6 +71,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; /** @@ -283,7 +285,8 @@ private PlanNode createQueryPlan(QueryStmt stmt, Analyzer analyzer, long default if (analyzer.hasEmptyResultSet()) { // Must clear the scanNodes, otherwise we will get NPE in Coordinator::computeScanRangeAssignment - scanNodes.clear(); + Set scanTupleIds = new HashSet<>(root.getAllScanTupleIds()); + scanNodes.removeIf(scanNode -> scanTupleIds.contains(scanNode.getTupleIds().get(0))); PlanNode node = createEmptyNode(stmt, analyzer); // Ensure result exprs will be substituted by right outputSmap node.setOutputSmap(root.outputSmap);