You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "PengFei Li (Jira)" <ji...@apache.org> on 2024/04/30 13:58:00 UTC

[jira] [Commented] (FLINK-35275) ArrayContainsFunction uses wrong DataType to create element getter

    [ https://issues.apache.org/jira/browse/FLINK-35275?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17842395#comment-17842395 ] 

PengFei Li commented on FLINK-35275:
------------------------------------

[~twalthr] Could you help confirm if this is a bug? If so, I'd like to fix it.

> 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)