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]
