gluesql_core/ast_builder/
table_name.rs

1use super::{
2    table_factor::TableType, AlterTableNode, CreateIndexNode, CreateTableNode, DeleteNode,
3    DropIndexNode, DropTableNode, IndexItemNode, InsertNode, OrderByExprNode, SelectNode,
4    ShowColumnsNode, TableFactorNode, UpdateNode,
5};
6#[derive(Clone, Debug)]
7pub struct TableNameNode {
8    pub table_name: String,
9}
10
11impl<'a> TableNameNode {
12    pub fn select(self) -> SelectNode<'a> {
13        let table_factor = TableFactorNode {
14            table_name: self.table_name,
15            table_type: TableType::Table,
16            table_alias: None,
17            index: None,
18        };
19
20        SelectNode::new(table_factor)
21    }
22
23    pub fn delete(self) -> DeleteNode<'static> {
24        DeleteNode::new(self.table_name)
25    }
26
27    pub fn update(self) -> UpdateNode {
28        UpdateNode::new(self.table_name)
29    }
30
31    pub fn insert(self) -> InsertNode {
32        InsertNode::new(self.table_name)
33    }
34
35    pub fn show_columns(self) -> ShowColumnsNode {
36        ShowColumnsNode::new(self.table_name)
37    }
38
39    pub fn alias_as(self, table_alias: &str) -> TableFactorNode<'a> {
40        TableFactorNode {
41            table_name: self.table_name,
42            table_type: TableType::Table,
43            table_alias: Some(table_alias.to_owned()),
44            index: None,
45        }
46    }
47
48    pub fn create_table(self) -> CreateTableNode {
49        CreateTableNode::new(self.table_name, false)
50    }
51
52    pub fn create_table_if_not_exists(self) -> CreateTableNode {
53        CreateTableNode::new(self.table_name, true)
54    }
55
56    pub fn drop_table(self) -> DropTableNode {
57        DropTableNode::new(self.table_name, false, false)
58    }
59
60    pub fn drop_table_if_exists(self) -> DropTableNode {
61        DropTableNode::new(self.table_name, true, false)
62    }
63
64    pub fn drop_table_cascade(self) -> DropTableNode {
65        DropTableNode::new(self.table_name, false, true)
66    }
67
68    pub fn drop_table_if_exists_cascade(self) -> DropTableNode {
69        DropTableNode::new(self.table_name, true, true)
70    }
71
72    pub fn drop_index(self, name: &str) -> DropIndexNode {
73        DropIndexNode::new(self.table_name, name.to_owned())
74    }
75
76    pub fn create_index<T: Into<OrderByExprNode<'a>>>(
77        self,
78        name: &str,
79        column: T,
80    ) -> CreateIndexNode<'a> {
81        CreateIndexNode::new(self.table_name, name.to_owned(), column.into())
82    }
83
84    pub fn alter_table(self) -> AlterTableNode {
85        AlterTableNode::new(self.table_name)
86    }
87
88    pub fn index_by<T: Into<IndexItemNode<'a>>>(self, index_item: T) -> TableFactorNode<'a> {
89        TableFactorNode {
90            table_name: self.table_name,
91            table_type: TableType::Table,
92            table_alias: None,
93            index: Some(index_item.into()),
94        }
95    }
96}
97
98/// Entry point function to build statement
99pub fn table(table_name: &str) -> TableNameNode {
100    let table_name = table_name.to_owned();
101
102    TableNameNode { table_name }
103}