plusplusjiajia opened a new pull request, #740:
URL: https://github.com/apache/paimon-rust/pull/740
### Purpose
Follow-up to #733: the default `Catalog::load_table` wrapped `get_table`'s
result as `LoadedTable::Paimon` unconditionally, so a catalog that does not
override it skipped the resolver entirely. Beyond that, a table declared
`iceberg-table`, `object-table` or `lance-table` could still be read or written
as Paimon through several other paths; this PR closes them.
### Brief change log
**Catalog**
- The default `Catalog::load_table` classifies from the loaded table's own
options and goes through the checked `LoadedTable::external` constructor, so a
catalog that only implements `get_table` fails closed
- The default `list_partitions` refuses external tables.
**Core storage boundary**
- `CoreOptions::ensure_read_authorized` — already called at every path
that reads or mutates table storage — now also refuses an engine-served
declared type; `ensure_engine_can_serve` keeps the auth-only half.
- `IncrementalScan::plan`, `TableCommit::abort` (type-only) and the shared
write validator gain the missing check.
**Runtime type immutability**
- `copy_with_options` pins the stored `type` the way it pins
`query-auth.enabled`.
- `copy_with_branch` and `copy_with_time_travel` refuse external tables
before any IO.
**DataFusion**
- Guards kept only where core cannot cover: procedures (tag/branch
managers), `SHOW CREATE TABLE` (no storage IO), and provider construction
(validates before registering with the blob-reader registry).
--
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]