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 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/// Helper for constructing any table statement
30#[derive(Debug)]
31pub struct Table;
32
33/// All available types of table statement
34#[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    /// Construct table [`TableCreateStatement`]
47    pub fn create() -> TableCreateStatement {
48        TableCreateStatement::new()
49    }
50
51    /// Construct table [`TableAlterStatement`]
52    pub fn alter() -> TableAlterStatement {
53        TableAlterStatement::new()
54    }
55
56    /// Construct table [`TableDropStatement`]
57    pub fn drop() -> TableDropStatement {
58        TableDropStatement::new()
59    }
60
61    /// Construct table [`TableRenameStatement`]
62    pub fn rename() -> TableRenameStatement {
63        TableRenameStatement::new()
64    }
65
66    /// Construct table [`TableTruncateStatement`]
67    pub fn truncate() -> TableTruncateStatement {
68        TableTruncateStatement::new()
69    }
70}
71
72impl TableStatement {
73    /// Build corresponding SQL statement for certain database backend and return SQL string
74    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    /// Build corresponding SQL statement for certain database backend and return SQL string
85    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    /// Build corresponding SQL statement for certain database backend and return SQL string
96    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}