This is an automated email from the ASF dual-hosted git repository. yiguolei 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 62d06584f1e [feature](fe) add function 'BitmapAgg' in nereids (#25508) 62d06584f1e is described below commit 62d06584f1e9d12c0d5a0e2b6ad0991b216e8b93 Author: Jerry Hu <mrh...@gmail.com> AuthorDate: Wed Oct 18 14:24:27 2023 +0800 [feature](fe) add function 'BitmapAgg' in nereids (#25508) --- .../doris/catalog/BuiltinAggregateFunctions.java | 2 + .../trees/expressions/functions/agg/BitmapAgg.java | 66 ++++++++++++++++++++++ .../visitor/AggregateFunctionVisitor.java | 5 ++ .../data/nereids_function_p0/agg_function/agg.out | 20 +++++++ .../nereids_function_p0/agg_function/agg.groovy | 14 +++++ 5 files changed, 107 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 f4e62d4f772..51bccc47e42 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 @@ -20,6 +20,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.Avg; import org.apache.doris.nereids.trees.expressions.functions.agg.AvgWeighted; +import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapAgg; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapIntersect; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount; @@ -82,6 +83,7 @@ public class BuiltinAggregateFunctions implements FunctionHelper { agg(AnyValue.class, "any", "any_value"), agg(Avg.class, "avg"), agg(AvgWeighted.class, "avg_weighted"), + agg(BitmapAgg.class, "bitmap_agg"), agg(BitmapIntersect.class, "bitmap_intersect"), agg(BitmapUnion.class, "bitmap_union"), agg(BitmapUnionCount.class, "bitmap_union_count"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BitmapAgg.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BitmapAgg.java new file mode 100644 index 00000000000..5b348b07318 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BitmapAgg.java @@ -0,0 +1,66 @@ +// 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.types.BigIntType; +import org.apache.doris.nereids.types.BitmapType; +import org.apache.doris.nereids.types.IntegerType; +import org.apache.doris.nereids.types.SmallIntType; +import org.apache.doris.nereids.types.TinyIntType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * AggregateFunction 'bitmap_agg'. + */ +public class BitmapAgg extends AggregateFunction + implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable { + public static final List<FunctionSignature> SIGNATURES = ImmutableList.of( + FunctionSignature.ret(BitmapType.INSTANCE).args(TinyIntType.INSTANCE), + FunctionSignature.ret(BitmapType.INSTANCE).args(SmallIntType.INSTANCE), + FunctionSignature.ret(BitmapType.INSTANCE).args(IntegerType.INSTANCE), + FunctionSignature.ret(BitmapType.INSTANCE).args(BigIntType.INSTANCE) + ); + + public BitmapAgg(Expression arg0) { + super("bitmap_agg", arg0); + } + + public BitmapAgg(boolean distinct, Expression arg0) { + super("bitmap_agg", distinct, arg0); + } + + @Override + public List<FunctionSignature> getSignatures() { + return SIGNATURES; + } + + @Override + public AggregateFunction withDistinctAndChildren(boolean distinct, List<Expression> children) { + Preconditions.checkArgument(children.size() == 1); + return new BitmapAgg(distinct, children.get(0)); + } +} 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 280b8c47ab6..012906bdf52 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 @@ -21,6 +21,7 @@ import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunctio import org.apache.doris.nereids.trees.expressions.functions.agg.AnyValue; 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; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapIntersect; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount; @@ -91,6 +92,10 @@ public interface AggregateFunctionVisitor<R, C> { return visitAggregateFunction(avgWeighted, context); } + default R visitBitmapAgg(BitmapAgg bitmapAgg, C context) { + return visitAggregateFunction(bitmapAgg, context); + } + default R visitBitmapIntersect(BitmapIntersect bitmapIntersect, C context) { return visitAggregateFunction(bitmapIntersect, 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 8474651326b..78573751cb0 100644 --- a/regression-test/data/nereids_function_p0/agg_function/agg.out +++ b/regression-test/data/nereids_function_p0/agg_function/agg.out @@ -923,6 +923,26 @@ -- !sql_bitmap_intersect_Bitmap_agg_phase_4_notnull -- 12 \N +-- !sql_bitmap_agg_tinyint -- +0 +7 +5 + +-- !sql_bitmap_agg_smallint -- +0 +7 +5 + +-- !sql_bitmap_agg_int -- +0 +7 +5 + +-- !sql_bitmap_agg_bigint -- +0 +7 +5 + -- !sql_bitmap_union_Bitmap_gb -- \N \N 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 c153cb903af..870b66d3392 100644 --- a/regression-test/suites/nereids_function_p0/agg_function/agg.groovy +++ b/regression-test/suites/nereids_function_p0/agg_function/agg.groovy @@ -399,6 +399,20 @@ suite("nereids_agg_fn") { qt_sql_bitmap_intersect_Bitmap_agg_phase_4_notnull ''' select /*+SET_VAR(disable_nereids_rules='THREE_PHASE_AGGREGATE_WITH_DISTINCT, TWO_PHASE_AGGREGATE_WITH_DISTINCT')*/ count(distinct id), bitmap_intersect(bitmap_hash(kbint)) from fn_test''' + // bitmap_agg + qt_sql_bitmap_agg_tinyint """ + select bitmap_count(b) from (select kbool, bitmap_agg(ktint) b from fn_test group by kbool) a order by kbool + """ + qt_sql_bitmap_agg_smallint """ + select bitmap_count(b) from (select kbool, bitmap_agg(ksint) b from fn_test group by kbool) a order by kbool + """ + qt_sql_bitmap_agg_int """ + select bitmap_count(b) from (select kbool, bitmap_agg(kint) b from fn_test group by kbool) a order by kbool + """ + qt_sql_bitmap_agg_bigint """ + select bitmap_count(b) from (select kbool, bitmap_agg(kbint) b from fn_test group by kbool) a order by kbool + """ + qt_sql_bitmap_union_Bitmap_gb ''' select bitmap_union(bitmap_hash(kbint)) from fn_test group by kbool order by kbool''' qt_sql_bitmap_union_Bitmap ''' --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org