sea_query/table/
mod.rs

1//! Table definition & alternations statements.
2//!
3//! # Usage
4//!
5//! - Table Create, see [`TableCreateStatement`]
6//! - Table Alter, see [`TableAlterStatement`]
7//! - Table Drop, see [`TableDropStatement`]
8//! - Table Rename, see [`TableRenameStatement`]
9//! - Table Truncate, see [`TableTruncateStatement`]
10
11use crate::SchemaBuilder;
12
13mod alter;
14mod column;
15mod create;
16mod drop;
17mod rename;
18mod truncate;
19
20pub use alter::*;
21pub use column::*;
22pub use create::*;
23pub use drop::*;
24pub use rename::*;
25pub use truncate::*;
26
27/// Helper for constructing any table statement
28#[derive(Debug)]
29pub struct Table;
30
31/// All available types of table statement
32#[derive(Debug, Clone)]
33pub enum TableStatement {
34    Create(TableCreateStatement),
35    Alter(TableAlterStatement),
36    Drop(TableDropStatement),
37    Rename(TableRenameStatement),
38    Truncate(TableTruncateStatement),
39}
40
41impl Table {
42    /// Construct table [`TableCreateStatement`]
43    pub fn create() -> TableCreateStatement {
44        TableCreateStatement::new()
45    }
46
47    /// Construct table [`TableAlterStatement`]
48    pub fn alter() -> TableAlterStatement {
49        TableAlterStatement::new()
50    }
51
52    /// Construct table [`TableDropStatement`]
53    pub fn drop() -> TableDropStatement {
54        TableDropStatement::new()
55    }
56
57    /// Construct table [`TableRenameStatement`]
58    pub fn rename() -> TableRenameStatement {
59        TableRenameStatement::new()
60    }
61
62    /// Construct table [`TableTruncateStatement`]
63    pub fn truncate() -> TableTruncateStatement {
64        TableTruncateStatement::new()
65    }
66}
67
68impl TableStatement {
69    /// Build corresponding SQL statement for certain database backend and return SQL string
70    pub fn build<T: SchemaBuilder>(&self, table_builder: T) -> String {
71        match self {
72            Self::Create(stat) => stat.build(table_builder),
73            Self::Alter(stat) => stat.build(table_builder),
74            Self::Drop(stat) => stat.build(table_builder),
75            Self::Rename(stat) => stat.build(table_builder),
76            Self::Truncate(stat) => stat.build(table_builder),
77        }
78    }
79
80    /// Build corresponding SQL statement for certain database backend and return SQL string
81    pub fn build_any(&self, table_builder: &dyn SchemaBuilder) -> String {
82        match self {
83            Self::Create(stat) => stat.build_any(table_builder),
84            Self::Alter(stat) => stat.build_any(table_builder),
85            Self::Drop(stat) => stat.build_any(table_builder),
86            Self::Rename(stat) => stat.build_any(table_builder),
87            Self::Truncate(stat) => stat.build_any(table_builder),
88        }
89    }
90
91    /// Build corresponding SQL statement for certain database backend and return SQL string
92    pub fn to_string<T: SchemaBuilder>(&self, table_builder: T) -> String {
93        match self {
94            Self::Create(stat) => stat.to_string(table_builder),
95            Self::Alter(stat) => stat.to_string(table_builder),
96            Self::Drop(stat) => stat.to_string(table_builder),
97            Self::Rename(stat) => stat.to_string(table_builder),
98            Self::Truncate(stat) => stat.to_string(table_builder),
99        }
100    }
101}