XiaoHongbo-Hope opened a new pull request, #10506:
URL: https://github.com/apache/paimon/pull/10506

   ### Purpose
   
   Existing image tables cannot register an additional video column because 
`video-frame-field` is immutable. Allow an existing data-evolution table to add 
a nullable BLOB column and register it as a video field in the same schema 
commit, in either change order. Historical rows remain NULL in the new column 
until separately backfilled; existing image columns and rows remain intact.
   
   Keep the immutable option guard for dynamic overrides and resets. Validate 
the complete schema change: retain existing video fields and only register 
newly allocated nullable columns without defaults. Reinterpreting an existing 
BLOB column, including one added in an earlier schema commit, remains rejected. 
Java and Python implement the same boundary.
   
   Also restore the historical `video-frame-field` value during time travel. 
The new Java regression exposed that otherwise a pre-addition snapshot inherits 
the current video field and fails schema validation. Python now restores the 
historical value and rejects dynamic video-field overrides; update the merge 
fallback fixture to create a valid video table instead of overriding a string 
column.
   
   Add documentation and regression cases covering both change orders, 
extending a video configuration, historical NULLs, old-schema appends, video 
payload/frame-index reads, selective Python backfill with unchanged row 
IDs/images, historical snapshots/tags, and rejected schema changes without 
partial publication.
   
   This changes schema evolution only; schema addition and data backfill remain 
separate commits. It does not change frame-order mapping or concurrent 
reassign/backfill semantics.
   
   ### Tests
   
   JDK 8 and Python 3.11, using this checkout's Java and Python sources:
   
   - Build the codegen plugin required by the fresh worktree: `mvn -pl 
paimon-codegen-loader -am -Pfast-build -DskipTests package`.
   - `mvn -pl paimon-core -am -DfailIfNoTests=false 
-Dtest=BlobTableTest,SchemaManagerTest -DwildcardSuites=none test` (includes 
normal build checks).
   - Python schema/multimodal/schema-model suites: 122 passed, 5 skipped, 23 
subtests passed.
   - Python time-travel suite: 16 passed.
   - Directly invoked the updated video merge fallback test (no native 
execution is needed for this fallback branch).
   - Spotless, Python flake8 for the changed files, and `git diff --check`.
   
   Storage regressions use deterministic payload bytes and verify 
descriptors/frame indices; they are not codec, performance, or online DLF 
integration tests.
   


-- 
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]

Reply via email to