diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java index 8441e02828..b440d91a31 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java @@ -20,7 +20,6 @@ package org.apache.doris.nereids.trees.expressions.functions.agg; import org.apache.doris.catalog.FunctionSignature; import org.apache.doris.nereids.exceptions.AnalysisException; 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.ComputePrecisionForSum; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; @@ -35,7 +34,7 @@ import com.google.common.collect.ImmutableList; import java.util.List; /** MultiDistinctSum */ -public class MultiDistinctSum extends AggregateFunction implements UnaryExpression, AlwaysNotNullable, +public class MultiDistinctSum extends NullableAggregateFunction implements UnaryExpression, ExplicitlyCastableSignature, ComputePrecisionForSum, MultiDistinction { public static final List SIGNATURES = ImmutableList.of( @@ -45,11 +44,15 @@ public class MultiDistinctSum extends AggregateFunction implements UnaryExpressi ); public MultiDistinctSum(Expression arg0) { - super("multi_distinct_sum", true, arg0); + super("multi_distinct_sum", true, false, arg0); } public MultiDistinctSum(boolean distinct, Expression arg0) { - super("multi_distinct_sum", true, arg0); + super("multi_distinct_sum", true, false, arg0); + } + + public MultiDistinctSum(boolean distinct, boolean alwaysNullable, Expression arg0) { + super("multi_distinct_sum", true, alwaysNullable, arg0); } @Override @@ -64,6 +67,11 @@ public class MultiDistinctSum extends AggregateFunction implements UnaryExpressi return new Sum(getArgument(0)).getSignatures(); } + @Override + public NullableAggregateFunction withAlwaysNullable(boolean alwaysNullable) { + return new MultiDistinctSum(distinct, alwaysNullable, children.get(0)); + } + @Override public MultiDistinctSum withDistinctAndChildren(boolean distinct, List children) { Preconditions.checkArgument(children.size() == 1); diff --git a/regression-test/data/nereids_syntax_p0/adjust_nullable.out b/regression-test/data/nereids_syntax_p0/adjust_nullable.out index 4c443b8493..485b1414ea 100644 --- a/regression-test/data/nereids_syntax_p0/adjust_nullable.out +++ b/regression-test/data/nereids_syntax_p0/adjust_nullable.out @@ -4,3 +4,5 @@ 2 3 +-- !distinct_sum -- + diff --git a/regression-test/suites/nereids_syntax_p0/adjust_nullable.groovy b/regression-test/suites/nereids_syntax_p0/adjust_nullable.groovy index 5014dd7b1d..24fb20d9aa 100644 --- a/regression-test/suites/nereids_syntax_p0/adjust_nullable.groovy +++ b/regression-test/suites/nereids_syntax_p0/adjust_nullable.groovy @@ -64,5 +64,36 @@ suite("adjust_nullable") { order by subq_1.gid; """ + + sql """ + drop table if exists table_7_undef_undef; + """ + sql """ + drop table if exists table_8_undef_undef; + """ + sql """ + create table table_7_undef_undef (`pk` int,`col_int_undef_signed` int ,`col_varchar_10__undef_signed` varchar(10) ,`col_varchar_1024__undef_signed` varchar(1024) ) engine=olap distributed by hash(pk) buckets 10 properties( 'replication_num' = '1'); + """ + sql """ + create table table_8_undef_undef (`pk` int,`col_int_undef_signed` int ,`col_varchar_10__undef_signed` varchar(10) ,`col_varchar_1024__undef_signed` varchar(1024) ) engine=olap distributed by hash(pk) buckets 10 properties( 'replication_num' = '1'); + """ + + sql """ + insert into table_7_undef_undef values (0,6,"didn't","was"),(1,1,"mean",'k'),(2,2,'i','i'),(3,null,'y','p'),(4,8,"you're","and"),(5,6,'i','o'),(6,null,"have","not"); + """ + sql """ + insert into table_8_undef_undef values (0,null,"one",'m'),(1,null,"got",'m'),(2,9,'m','b'),(3,null,"say",'p'),(4,null,'t',"yeah"),(5,null,'y',"because"),(6,null,"from",'q'),(7,null,"the","in"); + """ + + qt_distinct_sum """ + SELECT SUM( DISTINCT alias1 . `col_int_undef_signed` ) AS field1 FROM table_7_undef_undef AS alias1 LEFT JOIN table_8_undef_undef AS alias2 ON alias1 . `col_varchar_1024__undef_signed` = alias2 . `col_varchar_1024__undef_signed` WHERE alias2 . `pk` >= alias2 . `col_int_undef_signed` HAVING field1 <> 8 ORDER BY field1 , field1 ; + """ + + sql """ + drop table if exists table_7_undef_undef; + """ + sql """ + drop table if exists table_8_undef_undef; + """ }