uqa_sql/catalog/roles/dependencies/
context.rs1use crate::{
10 catalog::{
11 security::{
12 database::BoundDatabaseSecurity, BoundSchemaSecurity, BoundSequenceSecurity,
13 BoundTableSecurity,
14 },
15 stored_view::StoredView,
16 },
17 routines::SQLUserFunction,
18};
19use std::{collections::BTreeMap, ops::Deref, sync::Arc};
20use uqa_core::RelationIdentity;
21
22pub type RoleDependencyRead<'a, T> = Box<dyn Deref<Target = T> + 'a>;
23pub trait RoleTableSecurity {
25 fn security(&self) -> BoundTableSecurity;
26 fn persistence(&self) -> crate::ast::RelationPersistence;
27}
28pub trait RoleTablesRead {
30 fn iter(&self) -> Box<dyn Iterator<Item = (&RelationIdentity, &dyn RoleTableSecurity)> + '_>;
31}
32pub trait RoleDependencyCatalog:
33 crate::catalog::security::system_relations::SystemRelationSecurityCatalog
34{
35 fn database(&self) -> RoleDependencyRead<'_, BoundDatabaseSecurity>;
36 fn schemas(&self) -> RoleDependencyRead<'_, BTreeMap<String, BoundSchemaSecurity>>;
37 fn tables(&self) -> Box<dyn RoleTablesRead + '_>;
38 fn views(&self) -> RoleDependencyRead<'_, BTreeMap<RelationIdentity, StoredView>>;
39 fn foreign_tables(
40 &self,
41 ) -> RoleDependencyRead<'_, BTreeMap<RelationIdentity, BoundTableSecurity>>;
42 fn sequences(
43 &self,
44 ) -> RoleDependencyRead<'_, BTreeMap<RelationIdentity, BoundSequenceSecurity>>;
45 fn routines(&self) -> RoleDependencyRead<'_, BTreeMap<String, Vec<Arc<SQLUserFunction>>>>;
46 fn domains(
47 &self,
48 ) -> RoleDependencyRead<'_, BTreeMap<String, crate::catalog::domain::StoredDomain>>;
49}
50
51pub trait TemporaryRoleDependencyCatalog: RoleDependencyCatalog {
52 fn temporary_namespace_allocated(&self) -> bool;
53 fn sequence_persistence(
54 &self,
55 ) -> RoleDependencyRead<'_, BTreeMap<RelationIdentity, crate::ast::RelationPersistence>>;
56}