This is an automated email from the ASF dual-hosted git repository.
jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new f0c16ab20d [fix](Nereids): visitLogicalWindow don't override (#23376)
f0c16ab20d is described below
commit f0c16ab20d3ee65d408bdbfe82db51b748244b4c
Author: jakevin <[email protected]>
AuthorDate: Wed Aug 23 18:50:15 2023 +0800
[fix](Nereids): visitLogicalWindow don't override (#23376)
- visitLogicalWindow don't override
- head index is wrong
---
.../doris/nereids/stats/StatsCalculator.java | 51 +++++++---------------
1 file changed, 15 insertions(+), 36 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index 10bb0b759b..c327416223 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -385,6 +385,7 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
return computeGenerate(generate);
}
+ @Override
public Statistics visitLogicalWindow(LogicalWindow<? extends Plan> window,
Void context) {
return computeWindow(window);
}
@@ -636,7 +637,7 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
}
ColumnStatistic cache = Config.enable_stats &&
FeConstants.enableInternalSchemaDb
? shouldIgnoreThisCol
- ? ColumnStatistic.UNKNOWN : getColumnStatistic(table,
colName) : ColumnStatistic.UNKNOWN;
+ ? ColumnStatistic.UNKNOWN : getColumnStatistic(table,
colName) : ColumnStatistic.UNKNOWN;
if (cache.avgSizeByte <= 0) {
cache = new ColumnStatisticBuilder(cache)
.setAvgSizeByte(slotReference.getColumn().get().getType().getSlotSize())
@@ -839,36 +840,29 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
return new Statistics(rowCount, columnStatsMap);
}
- private Statistics computeUnion(SetOperation setOperation) {
+ private Statistics computeUnion(Union union) {
// TODO: refactor this for one row relation
- List<Slot> head = null;
- Statistics headStats = null;
- List<List<Slot>> childOutputs =
- groupExpression.children()
+ List<Slot> head;
+ Statistics headStats;
+ List<List<Slot>> childOutputs = groupExpression.children()
.stream().map(ge ->
ge.getLogicalProperties().getOutput()).collect(Collectors.toList());
List<Statistics> childStats =
groupExpression.children().stream().map(Group::getStatistics).collect(Collectors.toList());
- if (setOperation instanceof Union) {
- childOutputs.addAll(((Union)
setOperation).getConstantExprsList().stream()
+
+ if (!union.getConstantExprsList().isEmpty()) {
+ childOutputs.addAll(union.getConstantExprsList().stream()
.map(l ->
l.stream().map(NamedExpression::toSlot).collect(Collectors.toList()))
.collect(Collectors.toList()));
- childStats.addAll(((Union)
setOperation).getConstantExprsList().stream()
+ childStats.addAll(union.getConstantExprsList().stream()
.map(this::computeOneRowRelation)
.collect(Collectors.toList()));
- if (!((Union) setOperation).getConstantExprsList().isEmpty()) {
- head = ((Union)
setOperation).getConstantExprsList().get(0).stream()
- .map(NamedExpression::toSlot)
- .collect(Collectors.toList());
- headStats = computeOneRowRelation(((Union)
setOperation).getConstantExprsList().get(0));
- }
- }
- if (head == null) {
- head = groupExpression.child(0).getLogicalProperties().getOutput();
- headStats = groupExpression.childStatistics(0);
}
+ head = childOutputs.get(0);
+ headStats = childStats.get(0);
+
StatisticsBuilder statisticsBuilder = new StatisticsBuilder();
- List<NamedExpression> unionOutput = setOperation.getOutputs();
+ List<NamedExpression> unionOutput = union.getOutputs();
for (int i = 0; i < head.size(); i++) {
double leftRowCount = headStats.getRowCount();
Slot headSlot = head.get(i);
@@ -888,21 +882,6 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
return statisticsBuilder.build();
}
- private Slot getLeftSlot(int fistSetOperation, int outputSlotIdx,
SetOperation setOperation) {
- return fistSetOperation == 0
- ? setOperation.getFirstOutput().get(outputSlotIdx)
- : setOperation.getOutputs().get(outputSlotIdx).toSlot();
- }
-
- private ColumnStatistic getLeftStats(int fistSetOperation,
- Slot leftSlot,
- Map<Expression, ColumnStatistic> leftStatsSlotIdToColumnStats,
- Map<Expression, ColumnStatistic> newColumnStatsMap) {
- return fistSetOperation == 0
- ? leftStatsSlotIdToColumnStats.get(leftSlot.getExprId())
- : newColumnStatsMap.get(leftSlot.getExprId());
- }
-
private Statistics computeExcept(SetOperation setOperation) {
Statistics leftStats = groupExpression.childStatistics(0);
List<NamedExpression> operatorOutput = setOperation.getOutputs();
@@ -971,7 +950,7 @@ public class StatsCalculator extends
DefaultPlanVisitor<Statistics, Void> {
Map<Expression, ColumnStatistic> columnStatisticMap =
windowOperator.getWindowExpressions().stream()
.map(expr -> {
Preconditions.checkArgument(expr instanceof Alias
- && expr.child(0) instanceof WindowExpression,
+ && expr.child(0) instanceof
WindowExpression,
"need WindowExpression, but we meet " + expr);
WindowExpression windExpr = (WindowExpression)
expr.child(0);
ColumnStatisticBuilder colStatsBuilder = new
ColumnStatisticBuilder();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]