[opt](nereids)replace scan by empty relation when all partitions are pruned (#26514)
* replace scan by empty relation when all partitions are pruned
This commit is contained in:
@ -24,9 +24,11 @@ import org.apache.doris.nereids.rules.RuleType;
|
||||
import org.apache.doris.nereids.rules.expression.rules.PartitionPruner;
|
||||
import org.apache.doris.nereids.rules.expression.rules.PartitionPruner.PartitionTableType;
|
||||
import org.apache.doris.nereids.trees.expressions.Slot;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalEmptyRelation;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
|
||||
import org.apache.doris.nereids.util.Utils;
|
||||
import org.apache.doris.qe.ConnectContext;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@ -73,6 +75,11 @@ public class PruneOlapScanPartition extends OneRewriteRuleFactory {
|
||||
if (!CollectionUtils.isEmpty(manuallySpecifiedPartitions)) {
|
||||
prunedPartitions.retainAll(manuallySpecifiedPartitions);
|
||||
}
|
||||
if (prunedPartitions.isEmpty()) {
|
||||
return new LogicalEmptyRelation(
|
||||
ConnectContext.get().getStatementContext().getNextRelationId(),
|
||||
filter.getOutput());
|
||||
}
|
||||
LogicalOlapScan rewrittenScan = scan.withSelectedPartitionIds(ImmutableList.copyOf(prunedPartitions));
|
||||
return new LogicalFilter<>(filter.getConjuncts(), rewrittenScan);
|
||||
}).toRule(RuleType.OLAP_SCAN_PARTITION_PRUNE);
|
||||
|
||||
Reference in New Issue
Block a user