[fix](Nereids) count_by_enum signature is wrong (#25167)

This commit is contained in:
morrySnow
2023-10-10 13:05:20 +08:00
committed by GitHub
parent 771b8b5bec
commit 181c58c691
3 changed files with 224 additions and 209 deletions

View File

@ -22,11 +22,9 @@ 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.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.ArrayType;
import org.apache.doris.nereids.types.StringType;
import org.apache.doris.nereids.util.ExpressionUtils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import java.util.List;
@ -35,20 +33,24 @@ import java.util.List;
public class CountByEnum extends AggregateFunction implements ExplicitlyCastableSignature, AlwaysNotNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(ArrayType.of(StringType.INSTANCE)).args(StringType.INSTANCE)
FunctionSignature.ret(StringType.INSTANCE).varArgs(StringType.INSTANCE)
);
/**
* constructor with 1 or more arguments.
*/
public CountByEnum(Expression arg, Expression... varArgs) {
super("count_by_enum", ExpressionUtils.mergeArguments(arg, varArgs));
public CountByEnum(Expression arg0, Expression... varArgs) {
super("count_by_enum", ExpressionUtils.mergeArguments(arg0, varArgs));
}
public CountByEnum(boolean distinct, Expression arg0, Expression... varArgs) {
super("count_by_enum", distinct, ExpressionUtils.mergeArguments(arg0, varArgs));
}
private CountByEnum(boolean distinct, Expression... varArgs) {
super("count_by_enum", distinct, varArgs);
}
@Override
public AggregateFunction withDistinctAndChildren(boolean distinct, List<Expression> children) {
Preconditions.checkArgument(children.size() == 1);
return new CollectList(distinct, children.get(0));
return new CountByEnum(distinct, children.toArray(new Expression[0]));
}
@Override

File diff suppressed because it is too large Load Diff

View File

@ -43,6 +43,11 @@ suite("nereids_agg_fn") {
select /*+SET_VAR(disable_nereids_rules='THREE_PHASE_AGGREGATE_WITH_DISTINCT, TWO_PHASE_AGGREGATE_WITH_DISTINCT')*/ count(distinct id, kint), any_value(kint) from fn_test group by kbool order by kbool'''
sql '''
select /*+SET_VAR(disable_nereids_rules='THREE_PHASE_AGGREGATE_WITH_DISTINCT, TWO_PHASE_AGGREGATE_WITH_DISTINCT')*/ count(distinct id), any_value(kint) from fn_test'''
// count_by_enum_string result is unstable in one line, so just check not core
sql '''
select count_by_enum(kstr) from fn_test group by kbool order by kbool'''
sql '''
select count_by_enum(kstr) from fn_test_not_nullable group by kbool order by kbool'''
qt_sql_avg_TinyInt_gb '''
select avg(ktint) from fn_test group by kbool order by kbool'''
@ -568,7 +573,6 @@ suite("nereids_agg_fn") {
select /*+SET_VAR(disable_nereids_rules='THREE_PHASE_AGGREGATE_WITH_DISTINCT, TWO_PHASE_AGGREGATE_WITH_DISTINCT')*/ count(distinct id, kint), count(kint) from fn_test group by kbool order by kbool'''
qt_sql_count_AnyData_agg_phase_4_notnull '''
select /*+SET_VAR(disable_nereids_rules='THREE_PHASE_AGGREGATE_WITH_DISTINCT, TWO_PHASE_AGGREGATE_WITH_DISTINCT')*/ count(distinct id), count(kint) from fn_test'''
qt_sql_group_bit_and_TinyInt_gb '''
select group_bit_and(ktint) from fn_test group by kbool order by kbool'''
qt_sql_group_bit_and_TinyInt '''