[core] Complete nested updates and partition-aware temporal upserts - #973
Merged
Merged
Conversation
leaves12138
approved these changes
Sep 27, 2026
leaves12138
left a comment
There was a problem hiding this comment.
Reviewed fab8376 together with the PyPaimon integration in apache/paimon#10242 at 32fc7188c744e7ce2efb7f07051971d22477277b. No blocking regression found in the reviewed changes.
Checked the distinction between safe predicate casts and whole-column row-ID constructor fallback, nested NULL/slice handling, temporal key precision and duplicate matching, and exact partition filtering without changing global row IDs or the pinned snapshot. Also checked the Java-compatible partition normalization and sequence-ordering integration.
Local validation:
- 36 focused core unit tests and 32 public integration tests passed (68 total).
- Built the Python extension from this exact revision. With PyArrow 18.1 and all five Native CI flags, the paired Python suites produced 973 passed, 2 expected Python-only skips, and 16 passed subtests.
- 12 additional constructor/partition boundary cases passed. Rustfmt and changed-file Python lint passed.
All 14 current Rust CI checks are successful. Merge this core change before the dependent Python PR and rerun its Native CI against main.
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
Complete the Rust core capabilities needed for PyPaimon Native nested updates and temporal-key upserts, and restrict upsert data reads to the input partitions.
Dependent PyPaimon integration and end-to-end tests: apache/paimon#10242. Its Native CI continues to build
apache/paimon-rust@main, so this core PR should merge first.The existing implementation rejects equivalent Arrow layouts such as
list<item: int>versus Paimon'slist<element: int>, lacks several row-ID constructor conversions, rejects temporal upsert keys, and reads unrelated partitions during key matching.Brief change log
All conversion and upsert execution remains in Rust core. Invalid UTF-8 MAP field names are rejected rather than reproducing PyArrow's silent NULL result for malformed names.
Tests
table::update_input::tests(28),table::write_batch_normalize::tests(4),table::upsert_key_matcher::tests(3),table::table_upsert::tests(1).table_update_test,table_update_nested_test,table_update_paths_test(32).cargo clippy --locked --all-targets --workspace --features fulltext,vortex -- -D warningsandcargo fmt --all --checkpassed.takekernel; their Native counterparts pass.API and Format
No public API or persisted format changes. Existing update and upsert APIs accept additional compatible inputs.
Documentation
No new configuration or public methods.