This is an automated email from the ASF dual-hosted git repository.

panxiaolei pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
     new 4c77635e6d [dev-1.1.2](cherry-pick) fix aggFnParams set not correct 
(#12108)
4c77635e6d is described below

commit 4c77635e6d3d4891d2a95fe8c9804fe26deb77e8
Author: Pxl <[email protected]>
AuthorDate: Fri Aug 26 17:06:49 2022 +0800

    [dev-1.1.2](cherry-pick) fix aggFnParams set not correct (#12108)
---
 .../apache/doris/analysis/FunctionCallExpr.java    | 27 +++++++++++++++++-----
 .../org/apache/doris/analysis/FunctionParams.java  |  9 ++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 58bca1cbf3..e249589f92 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -53,6 +53,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.text.StringCharacterIterator;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -173,12 +174,7 @@ public class FunctionCallExpr extends Expr {
         // fnParams = other.fnParams;
         // Clone the params in a way that keeps the children_ and the 
params.exprs()
         // in sync. The children have already been cloned in the super c'tor.
-        if (other.fnParams.isStar()) {
-            Preconditions.checkState(children.isEmpty());
-            fnParams = FunctionParams.createStarParam();
-        } else {
-            fnParams = new FunctionParams(other.fnParams.isDistinct(), 
children);
-        }
+        fnParams = other.fnParams.clone(children);
         aggFnParams = other.aggFnParams;
         this.isMergeAggFn = other.isMergeAggFn;
         fn = other.fn;
@@ -214,6 +210,25 @@ public class FunctionCallExpr extends Expr {
         return isMergeAggFn;
     }
 
+    @Override
+    protected Expr substituteImpl(ExprSubstitutionMap smap, Analyzer analyzer)
+            throws AnalysisException {
+        if (aggFnParams != null && aggFnParams.exprs() != null) {
+            ArrayList<Expr> newParams = new ArrayList<Expr>();
+            for (Expr expr : aggFnParams.exprs()) {
+                Expr substExpr = smap.get(expr);
+                if (substExpr != null) {
+                    newParams.add(substExpr.clone());
+                } else {
+                    newParams.add(expr);
+                }
+            }
+            aggFnParams = aggFnParams
+                    .clone(newParams);
+        }
+        return super.substituteImpl(smap, analyzer);
+    }
+
     @Override
     public Expr clone() {
         return new FunctionCallExpr(this);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
index 742cbf4b4c..581b70d15d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
@@ -21,6 +21,7 @@ import org.apache.doris.common.io.Writable;
 import org.apache.doris.thrift.TAggregateExpr;
 import org.apache.doris.thrift.TTypeDesc;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
 import java.io.DataInput;
@@ -135,4 +136,12 @@ public class FunctionParams implements Writable {
         aggExpr.setParamTypes(paramTypes);
         return aggExpr;
     }
+
+    public FunctionParams clone(List<Expr> children) {
+        if (isStar()) {
+            Preconditions.checkState(children.isEmpty());
+            return FunctionParams.createStarParam();
+        }
+        return new FunctionParams(isDistinct(), children);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to