thswlsqls opened a new issue, #9859:
URL: https://github.com/apache/paimon/issues/9859

   **Search before asking**
   - [x] I searched in the [issues](https://github.com/apache/paimon/issues) 
and found nothing similar.
   
   **Paimon version**
   master @ 2bbdb668f (2.2-SNAPSHOT)
   
   **Compute Engine**
   Engine-agnostic
   
   **Minimal reproduce step**
   A generated `RecordEqualiser` returns `false` for `ARRAY<INT>` `[1, null]` 
vs `[1, null]` and for `MAP<INT, INT>` `{1 -> null}` vs `{1 -> null}`.
   
   `ScalarOperatorGens.generateArrayComparison` (element check) and 
`generateMapComparison` (both value checks) read only the result flag of 
`generateEquals`, which stays `false` when either operand is null. Map keys and 
`EqualiserCodeGenerator` top-level fields treat `null == null` as equal.
   
   #1214 introduced the element and HashMap value checks; #8534 added the 
pairwise map path with null-safe key matching but the same flag-only value 
check.
   
   **What doesn't meet your expectations?**
   Two null elements or two null map values should compare equal.
   
   **Anything else?**
   Production inputs (`KeyValueSerializer.fromRow`, `LookupLevels`) are not 
`BinaryRow`/`BinaryArray`, so they always hit this branch. With 
`changelog-producer.row-deduplicate=true`, 
`LookupChangelogMergeFunctionWrapper` emits a spurious `-U`/`+U` pair for an 
unchanged `[1, null]` or `{1 -> null}` value; 
`FieldCollectAgg`/`FieldNestedUpdateAgg` share the equaliser.
   
   **Are you willing to submit a PR?**
   - [x] I'm willing to submit a PR!
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to