@ -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 @@ abstract public class PlanNode extends TreeNode<PlanNode> {
|
||||
limit = -1;
|
||||
}
|
||||
|
||||
protected List<TupleId> getAllScanTupleIds() {
|
||||
List<TupleId> tupleIds = Lists.newArrayList();
|
||||
List<ScanNode> scanNodes = Lists.newArrayList();
|
||||
collectAll(Predicates.instanceOf(ScanNode.class), scanNodes);
|
||||
for(ScanNode node: scanNodes) {
|
||||
tupleIds.addAll(node.getTupleIds());
|
||||
}
|
||||
return tupleIds;
|
||||
}
|
||||
|
||||
public ArrayList<TupleId> getTupleIds() {
|
||||
Preconditions.checkState(tupleIds != null);
|
||||
return tupleIds;
|
||||
|
||||
@ -71,6 +71,8 @@ import org.apache.logging.log4j.Logger;
|
||||
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 @@ public class SingleNodePlanner {
|
||||
|
||||
if (analyzer.hasEmptyResultSet()) {
|
||||
// Must clear the scanNodes, otherwise we will get NPE in Coordinator::computeScanRangeAssignment
|
||||
scanNodes.clear();
|
||||
Set<TupleId> 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);
|
||||
|
||||
Reference in New Issue
Block a user