gluesql_core/ast_builder/
table_name.rs1use 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
98pub fn table(table_name: &str) -> TableNameNode {
100 let table_name = table_name.to_owned();
101
102 TableNameNode { table_name }
103}