[
https://issues.apache.org/jira/browse/FLINK-35275?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
PengFei Li updated FLINK-35275:
-------------------------------
Description:
In ArrayContainsFunction, elementGetter is used to get elements of an array,
but it's created from the needle data type rather than the element data type
which will lead to wrong results.
{code:java}
public ArrayContainsFunction(SpecializedContext context) {
super(BuiltInFunctionDefinitions.ARRAY_CONTAINS, context);
final DataType needleDataType =
context.getCallContext().getArgumentDataTypes().get(1);
elementGetter =
ArrayData.createElementGetter(needleDataType.getLogicalType());
} {code}
For example, the following sql returns true, but the expected is false. The
element type is nullable int, and the needle type is non-nullable int. Using
the needle type to create element getter will convert the NULL element to 0, so
the result returns true.
{code:java}
SELECT ARRAY_CONTAINS(ARRAY[1, NULL], 0){code}
was:
In `ArrayContainsFunction`, `elementGetter` is used to get elements of an
array, but it's created from the needle data type rather than the element data
type which will lead to wrong results.
{code:java}
public ArrayContainsFunction(SpecializedContext context) {
super(BuiltInFunctionDefinitions.ARRAY_CONTAINS, context);
final DataType needleDataType =
context.getCallContext().getArgumentDataTypes().get(1);
elementGetter =
ArrayData.createElementGetter(needleDataType.getLogicalType());
} {code}
For example, the following sql returns true, but the expected is false. The
element type is nullable int, and the needle type is non-nullable int. Using
the needle type to create element getter will convert the NULL element to 0, so
the result returns true.
{code:java}
SELECT ARRAY_CONTAINS(ARRAY[1, NULL], 0){code}
> ArrayContainsFunction uses wrong DataType to create element getter
> ------------------------------------------------------------------
>
> Key: FLINK-35275
> URL: https://issues.apache.org/jira/browse/FLINK-35275
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Runtime
> Affects Versions: 1.16.0
> Reporter: PengFei Li
> Priority: Minor
>
>
> In ArrayContainsFunction, elementGetter is used to get elements of an array,
> but it's created from the needle data type rather than the element data type
> which will lead to wrong results.
> {code:java}
> public ArrayContainsFunction(SpecializedContext context) {
> super(BuiltInFunctionDefinitions.ARRAY_CONTAINS, context);
> final DataType needleDataType =
> context.getCallContext().getArgumentDataTypes().get(1);
> elementGetter =
> ArrayData.createElementGetter(needleDataType.getLogicalType());
>
> } {code}
> For example, the following sql returns true, but the expected is false. The
> element type is nullable int, and the needle type is non-nullable int. Using
> the needle type to create element getter will convert the NULL element to 0,
> so the result returns true.
> {code:java}
> SELECT ARRAY_CONTAINS(ARRAY[1, NULL], 0){code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)