use crate::catalog::context::CatalogContext;
use uqa_sql::expr::enums::EnumLabelCatalog;
use uqa_sql::{expr::EngineHook, ColumnType, SQLError};
pub struct CatalogOutput<'a>(pub CatalogContext<'a>);
impl EngineHook for CatalogOutput<'_> {
fn resolve_type_oid(&self, oid: u32) -> Result<Option<ColumnType>, String> {
Ok(uqa_sql::catalog::type_metadata::builtin_scalar_type(oid)
.cloned()
.or_else(|| super::resolve_catalog_user_type_by_oid(&self.0, oid)))
}
fn resolve_regtype_output(&self, ty: &ColumnType, oid: i64) -> Result<Option<String>, String> {
super::resolve_regtype_output(&self.0, ty, oid)
}
fn enum_labels(&self) -> Option<&dyn EnumLabelCatalog> {
self.0.routines.enum_labels()
}
fn composite_types(&self) -> Option<&dyn uqa_sql::expr::composites::CompositeTypeCatalog> {
self.0.routines.composite_types()
}
fn nextval(&self, _name: &str) -> Result<i64, SQLError> {
Err(SQLError::Internal(
"catalog output cannot advance a sequence".into(),
))
}
fn currval(&self, _name: &str) -> Result<i64, SQLError> {
Err(SQLError::Internal(
"catalog output cannot read a sequence".into(),
))
}
fn setval(&self, _name: &str, _value: i64, _is_called: bool) -> Result<i64, SQLError> {
Err(SQLError::Internal(
"catalog output cannot change a sequence".into(),
))
}
}