sql_fun_sqlast/sem/
view_like.rs1use crate::sem::{
2 AlterView, AnalysisError, ColumnDefinition, ColumnName, CreateTableAs, CreateView,
3};
4
5#[derive(Debug, Clone)]
7pub enum ViewLike {
8 View(Box<CreateView>),
10 MaterializedView(CreateTableAs),
12}
13
14impl ViewLike {
15 pub fn apply_alter(&mut self, alter_view: &AlterView) -> Result<(), AnalysisError> {
21 match self {
22 Self::View(create_view) => create_view.apply_alter(alter_view),
23 Self::MaterializedView(create_table_as) => create_table_as.apply_alter(alter_view),
24 }
25 }
26
27 #[must_use]
29 pub fn get_column_def(&self, column_name: &ColumnName) -> Option<ColumnDefinition> {
30 match self {
31 Self::View(create_view) => create_view.get_column_def(column_name),
32 Self::MaterializedView(create_table_as) => create_table_as.get_column_def(column_name),
33 }
34 }
35
36 #[must_use]
38 pub fn has_column(&self, column_name: &ColumnName) -> bool {
39 match self {
40 Self::View(create_view) => create_view.has_column(column_name),
41 Self::MaterializedView(cta) => cta.has_column(column_name),
42 }
43 }
44
45 #[must_use]
47 pub fn is_materialized(&self) -> bool {
48 matches!(self, Self::MaterializedView(_))
49 }
50}
51
52impl From<&CreateView> for ViewLike {
53 fn from(value: &CreateView) -> Self {
54 Self::View(Box::new(value.clone()))
55 }
56}
57
58impl From<&CreateTableAs> for ViewLike {
59 fn from(value: &CreateTableAs) -> Self {
60 Self::MaterializedView(value.clone())
61 }
62}