[ 
https://issues.apache.org/jira/browse/FLINK-40989?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergey Nuyanzin resolved FLINK-40989.
-------------------------------------
    Fix Version/s: 2.4.0
       Resolution: Fixed

> MAP equality compares numeric values by reference
> -------------------------------------------------
>
>                 Key: FLINK-40989
>                 URL: https://issues.apache.org/jira/browse/FLINK-40989
>             Project: Flink
>          Issue Type: Bug
>          Components: Table SQL / Planner
>    Affects Versions: 2.3.0, 2.2.1, 1.20.5, 2.4.0
>            Reporter: Martijn Visser
>            Assignee: Ramin Gharib
>            Priority: Critical
>              Labels: pull-request-available
>             Fix For: 2.4.0
>
>
> Comparing two maps with {{=}} returns FALSE when they hold equal numeric 
> values, for example {{MAP['k', d0] = MAP['k', d1]}} with both columns 1.5, or 
> INT values outside the Integer cache such as 5000. {{generateMapComparison}} 
> in {{ScalarOperatorGens}} reads the values as boxed objects and passes them 
> to {{generateEquals}}, which emits {{==}} for numeric and time types, so the 
> boxes are compared by reference. MULTISET equality goes through the same 
> code. Two {{BinaryRowData}} holding such maps only compare equal because the 
> record equaliser compares their bytes.
> We should compare the unboxed values. Casting both values to their primitive 
> type before {{generateEquals}} makes all of these TRUE, and 
> {{MapFunctionITCase}}, {{CollectionFunctionsITCase}}, {{CastFunctionITCase}} 
> and {{JsonFunctionsITCase}} stay green.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to