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]

Reply via email to