Skip to main content

gluesql_core/query_builder/
table_name.rs

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