JingsongLi opened a new pull request, #901:
URL: https://github.com/apache/paimon-rust/pull/901

   ## Summary
   - With Data Evolution, a managed `.blob` payload is normally fetched by the 
format reader before a residual predicate can reject its row. Under `LIMIT`, 
this can access an unselected or corrupt payload.
   - For predicates on ordinary columns, first read only those columns and 
synthesized row IDs, then constrain the payload read to the matching row 
ranges. Preserve the quota across batches, BLOB files and splits.
   - Keep the existing path for BLOB-dependent predicates, BLOB views, 
descriptor mode and legacy files without row IDs. The two-pass path trades a 
second ordinary-column read for avoiding unselected payload I/O.
   
   ## Verification
   - Reproduced the failure before the fix using a valid BLOB file with the 
fourth payload corrupted: `LIMIT 2` with `id > 1` failed while only rows 2 and 
3 were required.
   - Extended the regression to one/two BLOB files, two splits and zero matches.
   - `cargo test -p paimon table::data_evolution_reader:: --lib 
--no-default-features --features storage-memory,storage-fs` (80 passed)
   - `cargo fmt --check` and `git diff --check` passed.
   
   A broader `cargo test ... blob --lib` run passed 137 tests; two REST token 
tests could not bind a local socket in this sandbox (`Operation not permitted`).


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