Repository navigation
[read] Support Java-compatible REST query authorization masks - #1122
Merged
JingsongLi merged 2 commits intoOct 13, 2026
Merged
Conversation
leaves12138
approved these changes
Oct 13, 2026
leaves12138
left a comment
There was a problem hiding this comment.
Reviewed the complete change at a743e5e. The Rust unit tests and Python/native authorization validation passed; no correctness issues found.
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.
What changes
Fill an existing PyPaimon Native gap: REST query authorization column masks using SUBSTRING, TRIM, LENGTH, BIT_LENGTH, PAD, TRANSLATE and OVERLAY. Parsing, dependency collection, validation and Arrow execution live in Rust core; no additional Python binding API is needed.
Match Java character/position semantics, including Unicode characters, UTF-8 bit length, mixed field/literal arguments, stored FieldRef type validation, checked integer conversion, SUBSTRING's lazy position parsing, NULL evaluation order, negative positions and wrapping OVERLAY arithmetic.
Carry the original REST response in Java-compatible QueryAuthSplit (SplitSerializer type 5). Metadata serialization preserves rules; deserialization retains the authorization-required marker without reconstructing a catalog-issued grant. Bare DataSplit serialization still refuses to strip authorization.
Keep a REST authorization session when an externally resolved schema has the same definition and branch. Ignore client-synthesized creation timestamps, preserve immutable options, support mutable option removals, and discard cached snapshot resolution. Changed schema definitions, branches and already resolved historical/pinned views still lose the session. A regression test prevents a resolved-schema copy from clearing historical flags while reusing an old grant.
Verification
Scope
This adds column-mask transforms. Transformed REST row-filter predicates remain outside this change. Companion PyPaimon PR: apache/paimon#10539. It uses the captured policy when planning or reading falls back and remains draft until this change reaches Rust main.