Skip to content

Commit 2f0590f

Browse files
committed
# This is a combination of 2 commits.
# This is the 1st commit message: Fix NPE when calling `Analyzer.getContext()` in partition pruning related logic. # The commit message apache#2 will be skipped: # Minor fix.
1 parent 723ee84 commit 2f0590f

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java

+2
Original file line numberDiff line numberDiff line change
@@ -1757,6 +1757,8 @@ public String getSchemaTable() {
17571757
return schemaTable;
17581758
}
17591759

1760+
// TODO: `globalState.context` could be null, refactor return value type to
1761+
// `Optional<ConnectContext>`.
17601762
public ConnectContext getContext() {
17611763
return globalState.context;
17621764
}

fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -426,15 +426,15 @@ private Collection<Long> partitionPrune(PartitionInfo partitionInfo, PartitionNa
426426
}
427427

428428
if (partitionInfo.getType() == PartitionType.RANGE) {
429-
if (analyzer.getContext().getSessionVariable().getPartitionPruneAlgorithmVersion() == 2) {
429+
if (partitionPruneV2Enabled()) {
430430
partitionPruner = new RangePartitionPrunerV2(keyItemMap,
431431
partitionInfo.getPartitionColumns(), columnNameToRange);
432432
} else {
433433
partitionPruner = new RangePartitionPruner(keyItemMap,
434434
partitionInfo.getPartitionColumns(), columnFilters);
435435
}
436436
} else if (partitionInfo.getType() == PartitionType.LIST) {
437-
if (analyzer.getContext().getSessionVariable().getPartitionPruneAlgorithmVersion() == 2) {
437+
if (partitionPruneV2Enabled()) {
438438
partitionPruner = new ListPartitionPrunerV2(keyItemMap, partitionInfo.getPartitionColumns(),
439439
columnNameToRange);
440440
} else {
@@ -445,6 +445,12 @@ private Collection<Long> partitionPrune(PartitionInfo partitionInfo, PartitionNa
445445
return partitionPruner.prune();
446446
}
447447

448+
private boolean partitionPruneV2Enabled() {
449+
ConnectContext context = analyzer.getContext();
450+
return context != null &&
451+
context.getSessionVariable().getPartitionPruneAlgorithmVersion() == 2;
452+
}
453+
448454
private Collection<Long> distributionPrune(
449455
MaterializedIndex table,
450456
DistributionInfo distributionInfo) throws AnalysisException {

fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.doris.catalog.Column;
3636
import org.apache.doris.catalog.PrimitiveType;
3737
import org.apache.doris.common.UserException;
38+
import org.apache.doris.qe.ConnectContext;
3839
import org.apache.doris.thrift.TNetworkAddress;
3940
import org.apache.doris.thrift.TScanRangeLocations;
4041

@@ -133,7 +134,12 @@ public void computeColumnFilter() {
133134
columnFilters.put(column.getName(), keyFilter);
134135
}
135136

136-
if (analyzer.getContext().getSessionVariable().getPartitionPruneAlgorithmVersion() == 2) {
137+
ConnectContext context = analyzer.getContext();
138+
if (context == null) {
139+
return;
140+
}
141+
142+
if (context.getSessionVariable().getPartitionPruneAlgorithmVersion() == 2) {
137143
ColumnRange columnRange = createColumnRange(slotDesc, conjuncts);
138144
if (columnRange != null) {
139145
columnNameToRange.put(column.getName(), columnRange);

0 commit comments

Comments
 (0)