[fix](projection)sort node's unmaterialized slots should be removed from resolvedTupleExprs (#12963)
This commit is contained in:
@ -45,6 +45,7 @@ import com.google.common.collect.Lists;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@ -247,6 +248,12 @@ public class SortNode extends PlanNode {
|
||||
TSortInfo sortInfo = info.toThrift();
|
||||
Preconditions.checkState(tupleIds.size() == 1, "Incorrect size for tupleIds in SortNode");
|
||||
if (resolvedTupleExprs != null) {
|
||||
List<SlotDescriptor> slotDescriptorList = this.info.getSortTupleDescriptor().getSlots();
|
||||
for (int i = slotDescriptorList.size() - 1; i >= 0; i--) {
|
||||
if (!slotDescriptorList.get(i).isMaterialized()) {
|
||||
resolvedTupleExprs.remove(i);
|
||||
}
|
||||
}
|
||||
sortInfo.setSortTupleSlotExprs(Expr.treesToThrift(resolvedTupleExprs));
|
||||
}
|
||||
TSortNode sortNode = new TSortNode(sortInfo, useTopN);
|
||||
@ -274,13 +281,14 @@ public class SortNode extends PlanNode {
|
||||
@Override
|
||||
public Set<SlotId> computeInputSlotIds(Analyzer analyzer) throws NotImplementedException {
|
||||
List<SlotDescriptor> slotDescriptorList = this.info.getSortTupleDescriptor().getSlots();
|
||||
List<Expr> materializedTupleExprs = new ArrayList<>(resolvedTupleExprs);
|
||||
for (int i = slotDescriptorList.size() - 1; i >= 0; i--) {
|
||||
if (!slotDescriptorList.get(i).isMaterialized()) {
|
||||
resolvedTupleExprs.remove(i);
|
||||
materializedTupleExprs.remove(i);
|
||||
}
|
||||
}
|
||||
List<SlotId> result = Lists.newArrayList();
|
||||
Expr.getIds(resolvedTupleExprs, null, result);
|
||||
Expr.getIds(materializedTupleExprs, null, result);
|
||||
return new HashSet<>(result);
|
||||
}
|
||||
|
||||
|
||||
@ -12,3 +12,6 @@
|
||||
2
|
||||
3
|
||||
|
||||
-- !sql4 --
|
||||
1
|
||||
|
||||
|
||||
@ -36,4 +36,9 @@ suite("test_subquery") {
|
||||
SELECT k1 FROM test_query_db.test GROUP BY k1 HAVING k1 IN (SELECT k1 FROM test_query_db.baseall WHERE
|
||||
k2 >= (SELECT min(k3) FROM test_query_db.bigtable WHERE k2 = baseall.k2)) order by k1;
|
||||
"""
|
||||
|
||||
qt_sql4 """
|
||||
select /*+SET_VAR(enable_projection=false) */
|
||||
count() from (select k2, k1 from test_query_db.baseall order by k1 limit 1) a;
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user