debugmiller opened a new pull request, #105:
URL: https://github.com/apache/datafusion-iceberg/pull/105

   Closes #104 
   
   `IS NULL` / `IS NOT NULL` on a struct, list or map column fails the scan, 
because iceberg-rust can only bind
   predicates on primitive fields. Filters are pushed down as `Inexact`, so the 
predicate never needed to reach Iceberg.
   
   In this change, `IcebergDataSourceBuilder::build` splits the predicate into 
its top-level conjuncts and keeps those that bind to the
   scanned snapshot's schema. In `WHERE id = 1 AND s IS NOT NULL`, `id = 1` is 
still pushed. An `OR` with a side that does
   not bind is dropped whole. No public API changes.
   
   Tests:
   
   - A SQL test (`nested_null_predicate_pushdown.slt`) creates a table with a 
struct column and checks that `IS NULL` and
     `IS NOT NULL` on it return the right rows (both fail on `main`), and that 
a null test on a field inside the struct
     still works.
   - A unit test (`test_scan_drops_conjuncts_that_do_not_bind`) builds scans 
with predicates that partly bind and checks
     that the binding conjuncts are kept, that a predicate with nothing that 
binds becomes no predicate, and that an `OR`
     with an unbindable side is dropped whole.


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