[Fix](func) CoreDump and Result Error in percentile function (#36647)

cherry pick #36643
This commit is contained in:
HappenLee
2024-06-21 23:42:45 +08:00
committed by GitHub
parent 445d42a57d
commit 90a4dd09f3
5 changed files with 21 additions and 8 deletions

View File

@ -21,7 +21,6 @@ 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.ExplicitlyCastableSignature;
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@ -35,8 +34,8 @@ import java.util.List;
/**
* AggregateFunction 'percentile'. This class is generated by GenerateFunction.
*/
public class Percentile extends AggregateFunction
implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable {
public class Percentile extends NullableAggregateFunction
implements BinaryExpression, ExplicitlyCastableSignature {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(DoubleType.INSTANCE).args(BigIntType.INSTANCE, DoubleType.INSTANCE)
@ -46,14 +45,18 @@ public class Percentile extends AggregateFunction
* constructor with 2 arguments.
*/
public Percentile(Expression arg0, Expression arg1) {
super("percentile", arg0, arg1);
this(false, arg0, arg1);
}
/**
* constructor with 2 arguments.
*/
public Percentile(boolean distinct, Expression arg0, Expression arg1) {
super("percentile", distinct, arg0, arg1);
this(distinct, false, arg0, arg1);
}
public Percentile(boolean distinct, boolean alwaysNullable, Expression arg0, Expression arg1) {
super("percentile", distinct, alwaysNullable, arg0, arg1);
}
@Override
@ -70,7 +73,12 @@ public class Percentile extends AggregateFunction
@Override
public Percentile withDistinctAndChildren(boolean distinct, List<Expression> children) {
Preconditions.checkArgument(children.size() == 2);
return new Percentile(distinct, children.get(0), children.get(1));
return new Percentile(distinct, alwaysNullable, children.get(0), children.get(1));
}
@Override
public NullableAggregateFunction withAlwaysNullable(boolean alwaysNullable) {
return new Percentile(distinct, alwaysNullable, children.get(0), children.get(1));
}
@Override

View File

@ -246,7 +246,7 @@ public interface AggregateFunctionVisitor<R, C> {
}
default R visitPercentile(Percentile percentile, C context) {
return visitAggregateFunction(percentile, context);
return visitNullableAggregateFunction(percentile, context);
}
default R visitPercentileApprox(PercentileApprox percentileApprox, C context) {