uqa_sql/catalog/
analysis.rs1use 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
30pub 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>;