Repository navigation
[python] Extend Native upsert keys and preserve decimal index predicates - #10635
Merged
JingsongLi merged 3 commits intoOct 18, 2026
Merged
Conversation
JingsongLi
marked this pull request as ready for review
October 18, 2026 00:46
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Enable Native for additional existing PyPaimon upsert key layouts and make DECIMAL predicate results consistent across Python and Native.
Changes
DECIMAL(10,2) != Decimal('1.235')previously rounded the lookup literal to1.24and discarded that matching row. Decline index evaluation when the serializer cannot represent the literal exactly, leaving the original predicate for data filtering, consistent with Native.Dependency
Depends on apache/paimon-rust#1150. Keep this draft until it is merged. Native CI continues to build Rust main; no extension pin or fallback is added.
Verification
2101 tests passed against the companion extension with Native plan/read/write execution counters checked. This includes the new decimal/upsert regressions and existing encoded-input, Dictionary MERGE, MERGE INTO, writer-capability, decimal-expression, and index-evaluator suites. Flake8 passed for all changed Python files. Independent review rounds completed, including the bounded exact numeric algorithm, NULL storage, and payload-identity mutation checks.
Only current read/write/update paths are changed; no metadata features or legacy Java compatibility is added.