use crate::Engine;
use uqa_execution::routines::privileges::{RoutinePrivilegeContext, RoutinePrivilegeNotices};
use uqa_sql::catalog::roles::RoleReference;
use uqa_sql::routines::security::RoutineExecutionAuthority;
impl RoutineExecutionAuthority for Engine {
fn current_role(&self) -> RoleReference {
Engine::current_role(self)
}
fn current_user_has_role_identity_privileges(
&self,
role: uqa_sql::catalog::roles::RoleIdentity,
) -> bool {
Engine::current_user_has_role_privileges(self, &role)
}
}
impl RoutinePrivilegeNotices for Engine {
fn routine_privilege_notice(&self, notice: uqa_sql::SQLNotice) {
self.push_sql_notice(notice);
}
}
impl Engine {
pub(crate) fn routine_privilege_context(&self) -> RoutinePrivilegeContext<'_> {
RoutinePrivilegeContext {
snapshot: self.catalog_read_view(),
builtin_security: self,
storage: self.storage.catalog.as_deref(),
locks: self,
schemas: self,
catalog: self.routine_mutation_context(),
types: self,
role_names: self,
notices: self,
}
}
}
impl uqa_sql::catalog::security::builtin_routines::BuiltinRoutineSecurityCatalog for Engine {
fn builtin_routine_securities(
&self,
) -> uqa_sql::catalog::security::builtin_routines::BuiltinRoutineSecurityRead<'_> {
Box::new(self.durable.builtin_routine_security.read())
}
}
impl uqa_execution::catalog::security::builtin_routines::BuiltinRoutineSecurityState for Engine {
fn builtin_routine_securities_write(
&self,
) -> Box<
dyn std::ops::DerefMut<
Target = uqa_sql::catalog::security::builtin_routines::BuiltinRoutineSecurities,
> + '_,
> {
Box::new(self.durable.builtin_routine_security.write())
}
}