[fix](array_apply) pick array apply fix (#39328)

## Proposed changes
backport: https://github.com/apache/doris/pull/39105
Issue Number: close #xxx

<!--Describe your changes.-->
This commit is contained in:
amory
2024-08-14 18:52:29 +08:00
committed by GitHub
parent 78d6e318fb
commit 226e01889c
6 changed files with 84 additions and 43 deletions

View File

@ -26,6 +26,7 @@ import org.apache.doris.nereids.trees.expressions.literal.StringLikeLiteral;
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.ArrayType;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.nereids.types.VarcharType;
import org.apache.doris.nereids.types.coercion.AnyDataType;
import org.apache.doris.nereids.types.coercion.FollowToAnyDataType;
@ -67,6 +68,15 @@ public class ArrayApply extends ScalarFunction
}
}
@Override
public void checkLegalityBeforeTypeCoercion() {
DataType argType = ((ArrayType) child(0).getDataType()).getItemType();
if (!(argType.isIntegralType() || argType.isFloatLikeType() || argType.isDecimalLikeType()
|| argType.isDateLikeType() || argType.isBooleanType())) {
throw new AnalysisException("array_apply does not support type: " + toSql());
}
}
@Override
public ArrayApply withChildren(List<Expression> children) {
Preconditions.checkArgument(children.size() == 3,