This is an automated email from the ASF dual-hosted git repository. morrysnow 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 57340a41878 [feature](nereids) add function array_agg (#25630) 57340a41878 is described below commit 57340a41878bb2e66ffdb93bddd458f44d5381ff Author: Liqf <109049295+lemonlit...@users.noreply.github.com> AuthorDate: Mon Oct 23 15:05:54 2023 +0800 [feature](nereids) add function array_agg (#25630) --- .../doris/catalog/BuiltinAggregateFunctions.java | 2 + .../trees/expressions/functions/agg/ArrayAgg.java | 67 ++++++++++++++++++++++ .../visitor/AggregateFunctionVisitor.java | 5 ++ .../data/nereids_function_p0/agg_function/agg.out | 29 ++++++++++ .../nereids_function_p0/agg_function/agg.groovy | 6 ++ 5 files changed, 109 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java index b92843f7e53..d5b71603e45 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java @@ -18,6 +18,7 @@ package org.apache.doris.catalog; import org.apache.doris.nereids.trees.expressions.functions.agg.AnyValue; +import org.apache.doris.nereids.trees.expressions.functions.agg.ArrayAgg; import org.apache.doris.nereids.trees.expressions.functions.agg.Avg; import org.apache.doris.nereids.trees.expressions.functions.agg.AvgWeighted; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapAgg; @@ -82,6 +83,7 @@ import java.util.Set; public class BuiltinAggregateFunctions implements FunctionHelper { public final List<AggregateFunc> aggregateFunctions = ImmutableList.of( agg(AnyValue.class, "any", "any_value"), + agg(ArrayAgg.class, "array_agg"), agg(Avg.class, "avg"), agg(AvgWeighted.class, "avg_weighted"), agg(BitmapAgg.class, "bitmap_agg"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ArrayAgg.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ArrayAgg.java new file mode 100644 index 00000000000..7e85eafcd2a --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ArrayAgg.java @@ -0,0 +1,67 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.nereids.trees.expressions.functions.agg; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.ArrayType; +import org.apache.doris.nereids.types.coercion.AnyDataType; +import org.apache.doris.nereids.types.coercion.FollowToAnyDataType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * AggregateFunction 'array_agg'. + */ +public class ArrayAgg extends AggregateFunction + implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable { + public static final List<FunctionSignature> SIGNATURES = ImmutableList.of( + FunctionSignature.ret(ArrayType.of(new FollowToAnyDataType(0))).args(new AnyDataType(0)) + ); + + public ArrayAgg(Expression arg0) { + super("array_agg", arg0); + } + + public ArrayAgg(boolean distinct, Expression arg0) { + super("array_agg", distinct, arg0); + } + + @Override + public AggregateFunction withDistinctAndChildren(boolean distinct, List<Expression> children) { + Preconditions.checkArgument(children.size() == 1); + return new ArrayAgg(distinct, children.get(0)); + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitArrayAgg(this, context); + } + + @Override + public List<FunctionSignature> getSignatures() { + return SIGNATURES; + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java index d1722254019..14e3dc304e9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java @@ -19,6 +19,7 @@ package org.apache.doris.nereids.trees.expressions.visitor; import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction; import org.apache.doris.nereids.trees.expressions.functions.agg.AnyValue; +import org.apache.doris.nereids.trees.expressions.functions.agg.ArrayAgg; import org.apache.doris.nereids.trees.expressions.functions.agg.Avg; import org.apache.doris.nereids.trees.expressions.functions.agg.AvgWeighted; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapAgg; @@ -85,6 +86,10 @@ public interface AggregateFunctionVisitor<R, C> { return visitAggregateFunction(anyValue, context); } + default R visitArrayAgg(ArrayAgg arrayAgg, C context) { + return visitAggregateFunction(arrayAgg, context); + } + default R visitAvg(Avg avg, C context) { return visitNullableAggregateFunction(avg, context); } diff --git a/regression-test/data/nereids_function_p0/agg_function/agg.out b/regression-test/data/nereids_function_p0/agg_function/agg.out index f3df5bb9145..9a50a76b710 100644 --- a/regression-test/data/nereids_function_p0/agg_function/agg.out +++ b/regression-test/data/nereids_function_p0/agg_function/agg.out @@ -6019,3 +6019,32 @@ true 10 {11:"string2"} 11 {12:"string3"} +-- !sql_array_agg -- +\N [NULL] +0 [1] +1 [2] +2 [3] +3 [4] +4 [5] +5 [6] +6 [7] +7 [8] +8 [9] +9 [10] +10 [11] +11 [12] + +-- !sql_array_agg_not_nullable -- +0 [1] +1 [2] +2 [3] +3 [4] +4 [5] +5 [6] +6 [7] +7 [8] +8 [9] +9 [10] +10 [11] +11 [12] + diff --git a/regression-test/suites/nereids_function_p0/agg_function/agg.groovy b/regression-test/suites/nereids_function_p0/agg_function/agg.groovy index 98b16857451..1a12fd0383d 100644 --- a/regression-test/suites/nereids_function_p0/agg_function/agg.groovy +++ b/regression-test/suites/nereids_function_p0/agg_function/agg.groovy @@ -2771,4 +2771,10 @@ suite("nereids_agg_fn") { qt_sql_map_agg_not_nullable ''' select id,map_agg(kint,kstr) from fn_test_not_nullable group by id order by id''' + qt_sql_array_agg ''' + select id,array_agg(kint) from fn_test group by id order by id''' + + qt_sql_array_agg_not_nullable ''' + select id,array_agg(kint) from fn_test_not_nullable group by id order by id''' + } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org