kevinjqliu opened a new pull request, #3412:
URL: https://github.com/apache/iceberg-python/pull/3412

   Inspired by the walrus issue in #3353
   
   ## Summary
   
   Several `if x := dict.get(k):` checks treated legitimate falsy values as 
missing:
   
   - `lower_bounds.get(field_id)` / `upper_bounds.get(field_id)` return 
`bytes`. `b""` is a valid serialization of an empty string and was being 
skipped, causing metrics-based row filtering to return `ROWS_MIGHT_MATCH` when 
it should have been `ROWS_CANNOT_MATCH` (and vice versa for strict eval).
   - `accessors[...].get(file.partition)` can return `0` for an 
`IdentityTransform` partition. The walrus dropped it, so projected partition 
columns were filled with `null` instead of `0`.
   - `inspect.py` `lower_bound` / `upper_bound` rendering had the same `b""` 
issue, showing `None` instead of `""` in `readable_metrics`.
   
   All conditions are switched to explicit `is not None` checks. A small 
`_readable_bound` helper deduplicates the inspect rendering.
   
   ## Changes
   
   - `pyiceberg/expressions/visitors.py` — `_InclusiveMetricsEvaluator` and 
`_StrictMetricsEvaluator` bound lookups.
   - `pyiceberg/io/pyarrow.py` — `_get_column_projection_values` and 
`ArrowProjectionVisitor` missing-field handling.
   - `pyiceberg/table/inspect.py` — extract `_readable_bound`, use it in both 
the `entries` and `_get_files_from_manifest` rendering paths.
   
   ## Tests
   
   - `tests/expressions/test_evaluator.py` — inclusive and strict evaluators 
with empty-string bounds.
   - `tests/io/test_pyarrow.py` — identity-transform projection with partition 
value `0`.
   - `tests/table/test_inspect.py` — `_readable_bound` with empty bytes and 
`None`.


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


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to