JingsongLi opened a new pull request, #1096: URL: https://github.com/apache/paimon-rust/pull/1096
### Purpose Preserve Java string predicate operators when their pattern is empty. Search refinement uses the predicate operator, so replacing an empty `contains` or `endsWith` with `IsNotNull` incorrectly accepts indexed candidates when `global-index.filter.refine-from-data=false`. - Retain `StartsWith`, `EndsWith` and `Contains` leaves for empty string literals. - Match Java `LikeOptimization`: empty and all-percent LIKE patterns remain `Like`; nonempty literal/prefix/suffix/substring optimizations remain unchanged. - Keep normalization in Rust core. The Python binding continues forwarding predicates through `PredicateBuilder`. - Add core and binding regressions, and real BTree/bitmap full-text queries with refinement on/off, NULL/empty labels and complete/partial index coverage. An empty `StartsWith` control remains exact. Paired Python REST regressions are in https://github.com/apache/paimon/pull/10494. Its CI continues installing Rust main. ### Verification - Before the fix, the 40-case Python comparison matrix reproduced 20 failures with refinement disabled and 20 passing controls with refinement enabled. - Rust predicate unit tests: 107 passed. - Rust full-text search tests: 25 passed, including the new 48-scenario search matrix. - Python binding predicate tests: 76 passed. - Clippy 1.98.0 for core/bindings with `fulltext,vortex` and `-D warnings`: passed. - Rustfmt and diff whitespace checks: passed. Independent source review found no actionable regressions. - Java parity checked against `PredicateBuilder`, `LikeOptimization` and `FilteredRowIdReader` source; no Java engine interoperability run. -- 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]
