Skip to content

Commit def48d5

Browse files
authored
[Fix](Short Circuit) fix no project list in OlapScanNode (apache#37121)
query like ``` select a, `__DORIS_DELETE_SIGN__` from `test_tbl` WHERE k = '1111111' ``` will not contain project list on top of OlapScanNode, so for short circuit queries, we should use output exprs on top of plan fragment. ``` +----------------------------------------------------------------------------------------------------------------------------+ | Explain String(Nereids Planner) | +----------------------------------------------------------------------------------------------------------------------------+ | PLAN FRAGMENT 0 | | OUTPUT EXPRS: | | k1[#0] | | k2[#1] | | k3[#2] | | k4[#3] | | k5[#4] | | k6[#5] | | k7[apache#6] | | k8[apache#7] | | k9[apache#8] | | k10[apache#9] | | k11[apache#10] | | k12[apache#11] | | new_column0[apache#12] | | new_column1[apache#13] | | __DORIS_DELETE_SIGN__[apache#14] | | PARTITION: UNPARTITIONED | | | | HAS_COLO_PLAN_NODE: false | | | | VRESULT SINK | | MYSQL_PROTOCAL | | | | 1:VEXCHANGE | | offset: 0 | | distribute expr lists: k1[#0], k2[#1], k3[#2] | | | | PLAN FRAGMENT 1 | | | | PARTITION: HASH_PARTITIONED: k1[#0], k2[#1], k3[#2] | | | | HAS_COLO_PLAN_NODE: false | | | | STREAM DATA SINK | | EXCHANGE ID: 01 | | UNPARTITIONED | | | | 0:VOlapScanNode(149) | | TABLE: regression_test_serving_p0.tbl_point_query0(tbl_point_query0), PREAGGREGATION: ON | | PREDICATES: (k1[#0] = 1231) AND (k2[#1] = 119291.110000000) AND (k3[#2] = 'ddd') AND (__DORIS_DELETE_SIGN__[apache#14] = 0) | | partitions=1/1 (tbl_point_query0) | | tablets=1/1, tabletList=13203 | | cardinality=0, avgRowSize=0.0, numNodes=1 | | pushAggOp=NONE | | SHORT-CIRCUIT | | | | | | Statistics | | planed with unknown column statistics | +----------------------------------------------------------------------------------------------------------------------------+ ```
1 parent ad48d00 commit def48d5

File tree

3 files changed

+71
-111
lines changed

3 files changed

+71
-111
lines changed

fe/fe-core/src/main/java/org/apache/doris/qe/ShortCircuitQueryContext.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.List;
3737
import java.util.Map;
3838
import java.util.UUID;
39+
import java.util.stream.Collectors;
3940

4041
public class ShortCircuitQueryContext {
4142
// Cached for better CPU performance, since serialize DescriptorTable and
@@ -66,8 +67,15 @@ public ShortCircuitQueryContext(Planner planner, Queriable analzyedQuery) throws
6667
this.serializedQueryOptions = ByteString.copyFrom(
6768
new TSerializer().serialize(options));
6869
List<TExpr> exprs = new ArrayList<>();
69-
for (Expr expr : planner.getFragments().get(1).getPlanRoot().getProjectList()) {
70-
exprs.add(expr.treeToThrift());
70+
OlapScanNode olapScanNode = (OlapScanNode) planner.getFragments().get(1).getPlanRoot();
71+
if (olapScanNode.getProjectList() != null) {
72+
// project on scan node
73+
exprs.addAll(olapScanNode.getProjectList().stream()
74+
.map(Expr::treeToThrift).collect(Collectors.toList()));
75+
} else {
76+
// add output slots
77+
exprs.addAll(planner.getFragments().get(0).getOutputExprs().stream()
78+
.map(Expr::treeToThrift).collect(Collectors.toList()));
7179
}
7280
TExprList exprList = new TExprList(exprs);
7381
serializedOutputExpr = ByteString.copyFrom(

0 commit comments

Comments
 (0)