pub trait SqlCatalog {
// Required method
fn get_collection(
&self,
database_id: DatabaseId,
name: &str,
) -> Result<Option<CollectionInfo>, SqlCatalogError>;
// Provided methods
fn resolve_relation(
&self,
database_id: DatabaseId,
name: &str,
) -> Result<Option<CollectionInfo>, SqlCatalogError> { ... }
fn lookup_array(&self, _name: &str) -> Option<ArrayCatalogView> { ... }
fn array_exists(&self, name: &str) -> bool { ... }
fn resolve_regclass(
&self,
_database_id: DatabaseId,
_tenant_id: u64,
_name: &str,
) -> Option<i64> { ... }
fn resolve_regtype(&self, _name: &str) -> Option<i64> { ... }
}Expand description
Trait for looking up collection metadata during planning.
Both Origin (via CredentialStore) and Lite (via the embedded redb catalog) implement this trait.
The return type is Result<Option<CollectionInfo>, _> with
a three-way semantics:
Ok(Some(info))— the collection exists and is usable. An Origin implementation will have acquired a descriptor lease at the current version before returning; subsequent planning against the same collection within the lease window is drain-safe.Ok(None)— the collection does not exist. Callers should surface this asSqlError::UnknownTable.Err(SqlCatalogError::RetryableSchemaChanged { .. })— the collection exists but a DDL drain is in progress. Callers propagate this up so the pgwire layer can retry the whole statement.
Required Methods§
fn get_collection( &self, database_id: DatabaseId, name: &str, ) -> Result<Option<CollectionInfo>, SqlCatalogError>
Provided Methods§
Sourcefn resolve_relation(
&self,
database_id: DatabaseId,
name: &str,
) -> Result<Option<CollectionInfo>, SqlCatalogError>
fn resolve_relation( &self, database_id: DatabaseId, name: &str, ) -> Result<Option<CollectionInfo>, SqlCatalogError>
Resolve ANY relation name to planner metadata. Catalog tables override
this to surface synthetic relations by name; the default resolves only
stored collections, identical to get_collection.
Sourcefn lookup_array(&self, _name: &str) -> Option<ArrayCatalogView>
fn lookup_array(&self, _name: &str) -> Option<ArrayCatalogView>
Look up an array by name. Returns None if no array with that
name is registered. The default implementation returns None so
that catalog adapters predating array support compile without
change — the array DML planner falls back to “array not found”
in that case.
Sourcefn array_exists(&self, name: &str) -> bool
fn array_exists(&self, name: &str) -> bool
Cheap existence check; the default delegates to lookup_array.
Sourcefn resolve_regclass(
&self,
_database_id: DatabaseId,
_tenant_id: u64,
_name: &str,
) -> Option<i64>
fn resolve_regclass( &self, _database_id: DatabaseId, _tenant_id: u64, _name: &str, ) -> Option<i64>
Resolve a relation name to its catalog OID for 'name'::regclass.
Returns None when the name is not found. The default returns None
so existing impls compile without change.
Sourcefn resolve_regtype(&self, _name: &str) -> Option<i64>
fn resolve_regtype(&self, _name: &str) -> Option<i64>
Resolve a type name to its catalog OID for 'name'::regtype.
Returns None when the name is not found. The default returns None
so existing impls compile without change.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".