1#![doc = include_str!("sem.md")]
2
3mod alter_owner;
4mod alter_seq;
5mod alter_table;
6mod base_context;
7mod cast;
8mod comment;
9mod constraint;
10mod create_comp_type;
11mod create_domain;
12mod create_enum_type;
13mod create_extension;
14mod create_function;
15mod create_index;
16mod create_schema;
17mod create_seq;
18mod create_table;
19mod create_table_as;
20mod create_view;
21mod cte;
22mod data_source;
23mod def_elem;
24mod delete_statement;
25mod error;
26mod from_clause;
27mod insert_statement;
28mod names;
29mod operators;
30mod parse_context;
31mod pg_type;
32mod scalar_expr;
33mod schema_file_context;
34mod search_path;
35mod select_statement;
36mod top_level_statement;
37mod type_system;
38mod update_statement;
39mod variable_set;
40mod view_like;
41
42pub mod problem;
43
44pub use self::{
45 alter_owner::{AlterOwner, analyze_alter_owner},
46 alter_seq::{AlterSequence, analyze_alter_seq},
47 alter_table::{AlterTable, AlterView, analyze_alter_statement},
48 base_context::BaseContext,
49 cast::{CastContext, CastDefinition},
50 comment::{Comment, analyze_comment},
51 constraint::{AnalizeConstraint, Constraint, PrimaryKeyConstraint},
52 create_comp_type::{CreateCompositType, analyze_create_comp_type},
53 create_domain::{CreateDomain, analyze_create_domain},
54 create_enum_type::{CreateEnum, analyze_create_enum_type},
55 create_extension::{CreateExtension, analyze_create_extension},
56 create_function::{CreateFunction, analyze_create_function},
57 create_index::{
58 CreateIndex, IndexElement, IndexElementWithOrder, SortOrder, analyze_index_stmt,
59 },
60 create_schema::{CreateSchema, analyze_create_schema},
61 create_seq::{CreateSequence, analyze_create_seq},
62 create_table::{
63 ColumnCollection, ColumnDefinition, ColumnName, CreateTable, TableName, ViewName,
64 analyze_create_stmt,
65 },
66 create_table_as::{CreateTableAs, analyze_create_table_as},
67 create_view::{CreateView, analyze_create_view},
68 cte::{CteName, CteStatement, WithClause},
69 data_source::{
70 AliasSpec, DataSource, DataSourceRowFunctions, DataSourceRowsFromFunc, JoinKind, Nullable,
71 },
72 def_elem::{DefElemKey, DefElemList, analyze_def_elem_list},
73 delete_statement::{DeleteStatement, analyze_delete_statement},
74 error::AnalysisError,
75 from_clause::FromClause,
76 insert_statement::{InsertStatement, analyze_insert_statement},
77 names::{CatalogName, FullName, LocalName, OperatorName, SchemaName, ValidOperatorName},
78 operators::{BinaryOperatorDefinition, OperatorDefinition, UnaryOperatorDefinition},
79 parse_context::{
80 BaseParseContext, CastInfoRead, DefaultSourceAccessService, FunctionInfoRead,
81 FunctionInfoWrite, IndexInfoRead, OperatorInfoRead, ParseContext, SearchPathRead,
82 SequenceInfoRead, SequenceInfoWrite, SourceAccessService, TableInfoRead, TableInfoWrite,
83 TypeInfoRead, TypeInfoWrite, ViewInfoRead, ViewInfoWrite,
84 },
85 pg_type::{PgBuiltInType, TypeDefinition, TypeReference},
86 problem::AnalysisProblem,
87 scalar_expr::{
88 ArithExpr, ArrayExpr, BooleanExpr, CaseExpr, CoalesceExpr, CollateExpr,
89 ColumnReferenceExpr, CteColumnRef, FuncCallExpr, ImplicitCastExpr, IndirectionExpr,
90 MinMaxExpr, NamedArgExpr, NullTestExpr, ParamRef, ScalarConstExpr, SemScalarExpr,
91 SqlValueExpr, SubLinkExpr, SubQueryColumnRef, TableColumnRef, TypeCastExpr,
92 analyze_scaler_expr,
93 },
94 schema_file_context::SchemaFileContext,
95 select_statement::{SelectStatement, analyze_select},
96 top_level_statement::{analyze_node, semantic_analysis},
97 type_system::{FunctionOverloadCollection, FunctionParam, OverloadVariant},
98 update_statement::{UpdateStatement, analyze_update_statement},
99 variable_set::{VariableSet, analyze_variable_set},
100 view_like::ViewLike,
101};
102pub use crate::AstAndContextPair;
103
104use std::fmt::Debug;
105
106#[derive(Debug, Clone)]
108pub enum ImplicitChange {
109 CreateIndex(CreateIndex),
111}
112
113impl From<CreateIndex> for ImplicitChange {
114 fn from(value: CreateIndex) -> Self {
115 Self::CreateIndex(value)
116 }
117}
118
119#[derive(Debug, Clone)]
121pub enum SemAst {
122 AlterOwner(AlterOwner),
124
125 AlterSequence(AlterSequence),
127
128 AlterTable(AlterTable),
130
131 AlterView(AlterView),
133
134 Comment(Comment),
136
137 CreateCompType(CreateCompositType),
139
140 CreateEnum(CreateEnum),
142
143 CreateFunction(CreateFunction),
145
146 CreateDomain(CreateDomain),
148
149 CreateSchema(CreateSchema),
151
152 CreateSequence(CreateSequence),
154
155 CreateTable(CreateTable),
157
158 CreateTableAs(CreateTableAs),
160
161 CreateView(CreateView),
163
164 CreateIndex(CreateIndex),
166
167 SelectStatement(SelectStatement),
169
170 InsertStatement(InsertStatement),
172
173 UpdateStatement(UpdateStatement),
175
176 DeleteStatement(DeleteStatement),
178
179 CreateExtension(CreateExtension),
181
182 VariableSet(VariableSet),
184}
185
186impl SemAst {
187 #[must_use]
189 pub fn into_select_statemtnt(self) -> Option<SelectStatement> {
190 match self {
191 SemAst::SelectStatement(select_statement) => Some(select_statement),
192 _ => None,
193 }
194 }
195}