From 0fc8d2e0293bf54d2ea2ea3d5266b3ca1dfd4266 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 19 May 2023 16:44:36 +0800 Subject: [PATCH] [Bug](decimal) fix variance_samp and avg_weighted #19861 --- .../org/apache/doris/analysis/FunctionCallExpr.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 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 96a45a54c1..df18e17880 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 @@ -73,8 +73,8 @@ import java.util.concurrent.atomic.AtomicBoolean; public class FunctionCallExpr extends Expr { public static final ImmutableSet STDDEV_FUNCTION_SET = new ImmutableSortedSet.Builder( String.CASE_INSENSITIVE_ORDER) - .add("stddev").add("stddev_val").add("stddev_samp").add("stddev_pop") - .add("variance").add("variance_pop").add("variance_pop").add("var_samp").add("var_pop").build(); + .add("stddev").add("stddev_val").add("stddev_samp").add("stddev_pop").add("variance").add("variance_pop") + .add("variance_pop").add("var_samp").add("var_pop").add("variance_samp").add("avg_weighted").build(); public static final Map, Type, Type>> PRECISION_INFER_RULE; public static final java.util.function.BiFunction, Type, Type> DEFAULT_PRECISION_INFER_RULE; public static final ImmutableSet ROUND_FUNCTION_SET = new ImmutableSortedSet.Builder( @@ -1429,10 +1429,13 @@ public class FunctionCallExpr extends Expr { System.arraycopy(childTypes, 0, newChildTypes, 0, newChildTypes.length); fn = getBuiltinFunction(fnName.getFunction(), newChildTypes, Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); - } else if (STDDEV_FUNCTION_SET.contains(fnName.getFunction().toLowerCase()) && children.size() == 1 + } else if (STDDEV_FUNCTION_SET.contains(fnName.getFunction().toLowerCase()) && collectChildReturnTypes()[0].isDecimalV3()) { - fn = getBuiltinFunction(fnName.getFunction(), new Type[] { Type.DOUBLE }, - Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); + Type[] childrenTypes = collectChildReturnTypes(); + Type[] args = new Type[childrenTypes.length]; + args[0] = Type.DOUBLE; + System.arraycopy(childrenTypes, 1, args, 1, childrenTypes.length - 1); + fn = getBuiltinFunction(fnName.getFunction(), args, Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); } else { // now first find table function in table function sets if (isTableFnCall) {