Skip to main content

uqa_sql/catalog/
analysis.rs

1//
2// Unified Query Algebra
3//
4// Copyright (c) 2023-2026 Cognica, Inc.
5//
6
7//! Catalog descriptions required by static SQL binding.
8
9use super::resolution::RelationNameResolution;
10use crate::ast::ColumnDef;
11use crate::plan::QueryPlan;
12use crate::routines::SQLUserFunction;
13use crate::{ColumnType, SQLError};
14use std::sync::Arc;
15
16#[derive(Clone)]
17pub struct TableDefinition {
18    pub columns: Arc<Vec<ColumnDef>>,
19    pub columns_declared: bool,
20}
21
22#[derive(Clone)]
23pub struct ViewDefinition {
24    pub query: QueryPlan,
25    pub output_columns: Option<Vec<String>>,
26    pub materialized: bool,
27    pub materialized_column_types: Vec<Option<ColumnType>>,
28}
29
30/// Immutable namespace-aware lookup for SQL analysis. This contract exposes definitions only; it grants no row access, mutation, locking, or transaction services.
31pub trait AnalysisCatalog: Send + Sync {
32    fn table_resolved(
33        &self,
34        resolution: &RelationNameResolution,
35        name: &str,
36    ) -> Result<Option<TableDefinition>, SQLError>;
37    fn table_name_resolved(
38        &self,
39        resolution: &RelationNameResolution,
40        name: &str,
41    ) -> Result<Option<String>, SQLError>;
42    fn view_resolved(
43        &self,
44        resolution: &RelationNameResolution,
45        name: &str,
46    ) -> Result<Option<ViewDefinition>, SQLError>;
47    fn foreign_table_resolved(
48        &self,
49        resolution: &RelationNameResolution,
50        name: &str,
51    ) -> Result<Option<TableDefinition>, SQLError>;
52    fn sequence_exists(
53        &self,
54        resolution: &RelationNameResolution,
55        name: &str,
56    ) -> Result<bool, SQLError>;
57    fn virtual_relation_schema(
58        &self,
59        resolution: &RelationNameResolution,
60        name: &str,
61    ) -> Result<Option<Vec<(String, ColumnType)>>, SQLError>;
62    fn sql_functions(
63        &self,
64        resolution: &RelationNameResolution,
65        name: &str,
66    ) -> Result<Option<Vec<Arc<SQLUserFunction>>>, SQLError>;
67}
68
69pub type CatalogReadView = Arc<dyn AnalysisCatalog>;