1use crate::SchemaBuilder;
12
13mod alter;
14mod column;
15mod constraint;
16mod create;
17mod drop;
18mod rename;
19mod truncate;
20
21pub use alter::*;
22pub use column::*;
23pub use constraint::*;
24pub use create::*;
25pub use drop::*;
26pub use rename::*;
27pub use truncate::*;
28
29#[derive(Debug)]
31pub struct Table;
32
33#[allow(clippy::large_enum_variant)]
35#[derive(Debug, Clone)]
36#[non_exhaustive]
37pub enum TableStatement {
38 Create(TableCreateStatement),
39 Alter(TableAlterStatement),
40 Drop(TableDropStatement),
41 Rename(TableRenameStatement),
42 Truncate(TableTruncateStatement),
43}
44
45impl Table {
46 pub fn create() -> TableCreateStatement {
48 TableCreateStatement::new()
49 }
50
51 pub fn alter() -> TableAlterStatement {
53 TableAlterStatement::new()
54 }
55
56 pub fn drop() -> TableDropStatement {
58 TableDropStatement::new()
59 }
60
61 pub fn rename() -> TableRenameStatement {
63 TableRenameStatement::new()
64 }
65
66 pub fn truncate() -> TableTruncateStatement {
68 TableTruncateStatement::new()
69 }
70}
71
72impl TableStatement {
73 pub fn build<T: SchemaBuilder>(&self, table_builder: T) -> String {
75 match self {
76 Self::Create(stat) => stat.build(table_builder),
77 Self::Alter(stat) => stat.build(table_builder),
78 Self::Drop(stat) => stat.build(table_builder),
79 Self::Rename(stat) => stat.build(table_builder),
80 Self::Truncate(stat) => stat.build(table_builder),
81 }
82 }
83
84 pub fn build_any(&self, table_builder: &dyn SchemaBuilder) -> String {
86 match self {
87 Self::Create(stat) => stat.build_any(table_builder),
88 Self::Alter(stat) => stat.build_any(table_builder),
89 Self::Drop(stat) => stat.build_any(table_builder),
90 Self::Rename(stat) => stat.build_any(table_builder),
91 Self::Truncate(stat) => stat.build_any(table_builder),
92 }
93 }
94
95 pub fn to_string<T: SchemaBuilder>(&self, table_builder: T) -> String {
97 match self {
98 Self::Create(stat) => stat.to_string(table_builder),
99 Self::Alter(stat) => stat.to_string(table_builder),
100 Self::Drop(stat) => stat.to_string(table_builder),
101 Self::Rename(stat) => stat.to_string(table_builder),
102 Self::Truncate(stat) => stat.to_string(table_builder),
103 }
104 }
105}