[SQL][Bug] Fix union bug (#4772) (#4807)

This commit is contained in:
ccoffline
2020-10-30 11:49:43 +08:00
committed by GitHub
parent 44498a1ae2
commit a291f4d285
2 changed files with 15 additions and 1 deletions

View File

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

View File

@ -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);