JingsongLi opened a new pull request, #1198: URL: https://github.com/apache/paimon-rust/pull/1198
### Purpose Upserts, including the Python binding, currently plan a target scan without the incoming key predicates. Existing BTree indexes therefore cannot narrow key lookup. Push per-column key candidates into scan planning while retaining complete tuple matching for duplicates, NULLs, and partition identity. ### Brief change log - Use full scalar-index search for mutation lookups so partially indexed tables still match existing rows. - Preserve index row ranges when reading keys and row IDs, without evaluating a large residual IN list for every row. - Keep fallback for floating-point and BLOB keys to preserve the existing matcher's supported types and equality semantics. ### Tests - Added regressions for actual BTree row ranges, partial/missing indexes, duplicate targets, partial updates, changed keys, deletion vectors, nullable composite indexes, partitions, and floating-point/BLOB fallback. - Upsert, key normalization, matcher, and global-index scanner suites: 112 passed, 1 existing ignored test. Command: `cargo test -p paimon --no-default-features --features storage-memory,storage-fs --lib -- table::table_upsert table::key_normalization table::upsert_key_matcher table::global_index_scanner`. - Formatting and `git diff --check` passed. ### API and Format No public API or storage-format changes. ### Documentation Existing upsert API behavior is preserved; the change optimizes key lookup. -- 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]
