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]
