JeonDaehong opened a new issue, #1189: URL: https://github.com/apache/paimon-rust/issues/1189
### Search before asking - [X] I searched in the [issues](https://github.com/apache/paimon-rust/issues) and found nothing similar. ### Description Follow-up to #1174, for FLOAT/DOUBLE partition values. 1. Row evaluation (`eval_row`, used by partition and bucket filters) compares with `partial_cmp`. Any NaN fails every comparison, and `-0.0 == 0.0`. Java's `Float.compare` / `Double.compare` put every NaN above `+Inf` and equal to itself, and `-0.0` below `0.0`. Against paimon-bundle 2.1.0, 144 of 768 value × literal × operator cases differ. 2. `compute_partition_stats` builds the manifest's partition min/max with `<=` / `>=`, so a NaN or `-0.0` partition makes the bounds depend on entry order. That order changes between runs, and planning can then drop partitions that match. Repro: a table partitioned by a DOUBLE `p` with partitions `0.0`, `-0.0`, `NaN` and `1.0`, one row each. Java's predicate matches the NaN and `1.0` partitions for `p > 0.5`. Rust returns the `1.0` row on some runs and nothing on others. Not covered here: stats pruning also treats `-0.0` as equal to `0.0`, so `p < 0.0` drops the `-0.0` partition. ### 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]
