use crate::Engine;
use uqa_core::RelationIdentity;
use uqa_execution::catalog::{
security::SequenceSecurity,
sequence::SequenceState,
sequence_introspection::{
SequenceIntrospectionCatalog, SequenceIntrospectionContext, SequenceObjectIdsRead,
SequenceStatesRead,
},
};
use uqa_sql::ast::RelationPersistence;
use uqa_storage::StorageBackendResult;
impl Engine {
pub(crate) fn sequence_introspection_context(&self) -> SequenceIntrospectionContext<'_> {
SequenceIntrospectionContext {
catalog: self.catalog_execution(),
sequences: self,
owners: self,
roles: self,
}
}
}
impl SequenceIntrospectionCatalog for Engine {
fn refresh_sequences(&self) -> StorageBackendResult<()> {
self.refresh_sequences_from_catalog()
}
fn object_ids(&self) -> SequenceObjectIdsRead<'_> {
Box::new(self.durable.sequence_object_ids.read())
}
fn states(&self) -> SequenceStatesRead<'_> {
Box::new(self.durable.sequences.read())
}
fn sequence_state(&self, relation: &RelationIdentity) -> Option<SequenceState> {
self.durable.sequences.read().get(relation).copied()
}
fn sequence_security(&self, relation: &RelationIdentity) -> Option<SequenceSecurity> {
self.durable.sequence_security.read().get(relation).cloned()
}
fn sequence_persistence(&self, relation: &RelationIdentity) -> Option<RelationPersistence> {
self.durable
.sequence_persistence
.read()
.get(relation)
.copied()
}
}