LuciferYang opened a new pull request, #9966:
URL: https://github.com/apache/paimon/pull/9966

   ### Purpose
   
   close #9965
   
   In a data-evolution table, `DataEvolutionFileStoreScan.pruneByReadType` 
keeps only the files that write a projected or filter field. When a projection 
selects only a column written by a "dedicated" file (a blob or vector-store 
file), a row-id-range group's kept list can hold only that dedicated file. A 
dedicated file covers just a sub-range of the group, so the reader derives the 
group's logical range from that sub-range and silently drops the rows outside 
it. The deletion-vector path already keeps a full-range anchor normal file 
unconditionally; the plain read path did not.
   
   This keeps the full-range anchor normal file whenever read-type pruning 
would otherwise leave a group holding only dedicated files, mirroring the 
deletion-vector path. A kept normal file is sufficient on its own, since all 
normal files of a row-id-range group share the same range, so the anchor is not 
pulled in when a normal file is already kept. The pruning core stays a static 
method so both behaviors can be pinned by unit tests.
   
   ### Tests
   
   `DataEvolutionFileStoreScanTest`: 
`testReadTypePruningKeepsAnchorWhenOnlyDedicatedFilesRemain` projects only a 
blob-written column and asserts the full-range anchor is kept alongside the 
blob; without the fix the group reports the blob's sub-range and drops the rows 
outside it. `testReadTypePruningKeepsAnchorOnlyWhenNoNormalFileRemains` asserts 
the anchor is not added when a normal file is already kept.
   
   🤖 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]

Reply via email to