gluesql_core/query_builder/
table_name.rs1use 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
95pub fn table(table_name: &str) -> TableNameNode {
97 let table_name = table_name.to_owned();
98
99 TableNameNode { table_name }
100}