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]

Reply via email to