uqa-sql 0.4.0

PostgreSQL-compatible SQL compiler built on libpg_query
Documentation
//
// Unified Query Algebra
//
// Copyright (c) 2023-2026 Cognica, Inc.
//

//! Retained read guards for role and membership catalogs during authorization and publication.
use super::{RoleDefinition, RoleMembership, RoleMembershipKey};
use std::{collections::BTreeMap, ops::Deref};
pub type RoleDefinitionRead<'a> = Box<dyn Deref<Target = BTreeMap<String, RoleDefinition>> + 'a>;
pub type RoleMembershipRead<'a> =
    Box<dyn Deref<Target = BTreeMap<RoleMembershipKey, RoleMembership>> + 'a>;
/// Roles and memberships are acquired separately so validation can retain its original error and lock order.
pub trait RoleCatalogGuards {
    fn role_definitions(&self) -> RoleDefinitionRead<'_>;
    fn role_memberships(&self) -> RoleMembershipRead<'_>;

    /// Capture current definitions for explicit inquiry subjects without requiring publication into a retained catalog.
    fn inquiry_role_definitions(&self) -> Result<RoleDefinitionRead<'_>, crate::SQLError> {
        Ok(self.role_definitions())
    }
}