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]