eneskeles opened a new pull request, #2111:
URL: https://github.com/apache/iceberg-go/pull/2111

   Fixes #2110
   
   ## Problem
   
   A copy-on-write `Delete` (or a filtered `Overwrite`) picked the rows to keep 
with `NOT(filter)`. For a NULL value, `v = 5` is NULL and so is `NOT(v = 5)`, 
so rows that never matched the filter were silently dropped from the rewritten 
file.
   
   ## Fix
   
   Keep the rows where the filter is **not true** (false or NULL). 
`notTrueExpr` rewrites the filter into a never-NULL "is true" expression and 
negates it. This is the same semantics Spark uses for copy-on-write (`NOT(cond 
<=> true)`).
   
   `In`/`NotIn` are left unchanged: the row filter evaluates set membership as 
false for a NULL term, so this keeps copy-on-write consistent with scans and 
merge-on-read deletes.
   
   ## Tests
   
   - Delete on v2 and v3 with NULLs across equal, comparison, in, not, is null, 
and/or filters
   - Filtered overwrite through the same path
   - Delete removes exactly the rows a scan with the same filter returns, on a 
float column with NaN and NULL
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)
   


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