Skip to main content

uqa_sql/catalog/events/definition/
context.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Definition analysis over live event metadata and fresh catalog binding scopes.
8
9use crate::{
10    ast::{ColumnDef, TableHierarchy},
11    binding::{
12        stored_columns::StoredColumnBindingContext,
13        stored_relations::{StoredQuerySequences, StoredRelationCatalog},
14        stored_routines::analysis::CatalogRoutineAnalysisContext,
15    },
16    catalog::{
17        regrole_dependencies::StoredRegroleResolver, security::table::TableAclPrivilege,
18        stored_view::StoredView, view::StoredViewKind,
19    },
20    routines::{
21        compilation::RoutineCompilationCatalog, security::RoutineExecutionAuthority,
22        RoutineResolution,
23    },
24    semantics::{
25        mutation_privileges::MutationPrivilegeCatalog, returning::ReturningAnalysisContext,
26        rules::action_binding::RuleSourceCatalog,
27    },
28    RowSchema, SQLError,
29};
30use uqa_core::RelationIdentity;
31
32/// Read the current catalog entry at the point required by definition analysis.
33pub trait EventRelationCatalog {
34    fn event_relation_owner(
35        &self,
36        relation: &RelationIdentity,
37    ) -> Result<(String, &'static str), SQLError>;
38    fn view_kind(&self, relation: &RelationIdentity) -> Option<StoredViewKind>;
39    fn view(&self, relation: &RelationIdentity) -> Option<StoredView>;
40    fn foreign_columns(&self, relation: &RelationIdentity) -> Option<Vec<ColumnDef>>;
41    fn restored_catalog_view_definition(&self, name: &str) -> Result<Option<StoredView>, SQLError>;
42    fn stored_view_schema(&self, view: &StoredView) -> Result<RowSchema, SQLError>;
43    fn loaded_table_hierarchy(&self, relation: &RelationIdentity) -> Option<TableHierarchy>;
44}
45/// Foreign-table authorization retains its own role and security read guards.
46pub trait EventForeignPrivileges {
47    fn ensure_foreign_table_privilege(
48        &self,
49        name: &str,
50        privilege: TableAclPrivilege,
51    ) -> Result<(), SQLError>;
52}
53#[derive(Clone, Copy)]
54pub struct EventAnalysisContext<'a> {
55    pub catalog: &'a dyn EventRelationCatalog,
56    pub relations: &'a dyn StoredRelationCatalog,
57    pub sources: &'a dyn RuleSourceCatalog,
58    pub routines: &'a dyn RoutineResolution,
59    pub authority: &'a dyn RoutineExecutionAuthority,
60    pub privileges: &'a dyn MutationPrivilegeCatalog,
61    pub foreign_privileges: &'a dyn EventForeignPrivileges,
62    pub columns: StoredColumnBindingContext<'a>,
63    pub returning: ReturningAnalysisContext<'a>,
64    pub stored_routines: CatalogRoutineAnalysisContext<'a>,
65    pub namespaces: &'a dyn RoutineCompilationCatalog,
66    pub sequences: &'a dyn StoredQuerySequences,
67    pub regroles: &'a dyn StoredRegroleResolver,
68}