[fix](nereids)acos function should return null literal instead of NaN value (#37996)

pick from master https://github.com/apache/doris/pull/37932

## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->
This commit is contained in:
starocean999
2024-07-18 09:28:56 +08:00
committed by GitHub
parent dcfc72bb36
commit ebc178af23
3 changed files with 29 additions and 11 deletions

View File

@ -26,10 +26,12 @@ import org.apache.doris.nereids.trees.expressions.literal.DoubleLiteral;
import org.apache.doris.nereids.trees.expressions.literal.FloatLiteral;
import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
import org.apache.doris.nereids.trees.expressions.literal.LargeIntLiteral;
import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
import org.apache.doris.nereids.trees.expressions.literal.SmallIntLiteral;
import org.apache.doris.nereids.trees.expressions.literal.StringLikeLiteral;
import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral;
import org.apache.doris.nereids.trees.expressions.literal.VarcharLiteral;
import org.apache.doris.nereids.types.DoubleType;
import java.math.BigInteger;
import java.security.SecureRandom;
@ -90,9 +92,17 @@ public class ExecutableFunctions {
return new DecimalV3Literal(literal.getValue().abs());
}
/**
* acos scalar function
*/
@ExecFunction(name = "acos", argTypes = {"DOUBLE"}, returnType = "DOUBLE")
public static Expression acos(DoubleLiteral literal) {
return new DoubleLiteral(Math.acos(literal.getValue()));
double result = Math.acos(literal.getValue());
if (Double.isNaN(result)) {
return new NullLiteral(DoubleType.INSTANCE);
} else {
return new DoubleLiteral(result);
}
}
@ExecFunction(name = "append_trailing_char_if_absent", argTypes = {"VARCHAR", "VARCHAR"}, returnType = "VARCHAR")