You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: let extension bundles declare catalog providers
`SessionExtensionComponents.catalog_providers` completes the set #1676 asked
for, minus object stores, which have no FFI type upstream and are tracked
separately in #1737.
`register_catalog_provider` had its import and its insert in one function with
no split point, so the import half moves to a shared `resolve_catalog_provider`
that both it and the new `_resolve_extension_catalogs` call. Both therefore
accept exactly the same shapes, and the bundle path gets the same treatment as
tables: imported against the handle carrying the finished codec chains, since
the getter is handed the logical codec its provider will serialize through.
Catalogs replace rather than collide. `register_catalog` returns whichever
provider it displaced, and the default `datafusion` catalog always exists, so a
library backing a session with its own metadata has to be able to replace one.
Only two bundles claiming a name in the same call is refused. That is the
opposite of tables, where a duplicate is an error, and both now say so where a
reader meets them.
`_install_extension_catalogs` returns `()`: nothing is left that can fail once
the providers are imported.
Rules 2 and 6 of the capsule-protocol skill now carry the two conventions the
stack established — which components a bundle hands over unwrapped and why, and
that a new component means a new resolve step rather than a fallible commit
step.
Closes#1676.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
0 commit comments