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

   ### Purpose
   
   Data evolution scans reused the full filter for row-range extraction, stats 
pruning, and global index evaluation.
   
   For mixed predicates such as `_ROW_ID = 1 OR f0 > 5`, the row-id visitor 
cannot fully convert the predicate to row ranges. The old path could still 
remove or push `_ROW_ID` branches into stats/global-index pruning, which may 
narrow scan semantics, hit system-field handling bugs, or incorrectly enable 
limit/top-n split pruning.
   
   This PR keeps the full predicate for read-time filtering and limit/top-n 
safety, while only pushing row-id-safe residual predicates into scan pruning 
and global index evaluation. Python follows the same rule and excludes 
`_ROW_ID` from stats predicates.
   
   ### Tests
   
    - `mvn -pl paimon-core -am -DfailIfNoTests=false
     
-Dtest=DataEvolutionBatchScanTest,BtreeGlobalIndexTableTest,DataEvolutionTableTest#testMixedRowIdOrFilterDoesNotPruneByUnsafeStatsResidual+testMixedRowIdOrFilterDisablesUnsafeLimitPushDown+testLimitPushDownWithFilterShouldNotEarlyStop
 test`
     - `python -m pytest paimon-python/pypaimon/tests/range_test.py 
paimon-python/pypaimon/tests/reader_predicate_test.py 
paimon-python/pypaimon/tests/test_early_row_range_filter.py 
paimon-python/pypaimon/tests/data_evolution_test.py paimon-python/pypaimon/
     
tests/predicates_test.py::PredicateTest::test_exclude_predicate_with_fields -q`


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