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>(&self, table_builder: T) -> String
75    where
76        T: SchemaBuilder,
77    {
78        match self {
79            Self::Create(stat) => stat.build(table_builder),
80            Self::Alter(stat) => stat.build(table_builder),
81            Self::Drop(stat) => stat.build(table_builder),
82            Self::Rename(stat) => stat.build(table_builder),
83            Self::Truncate(stat) => stat.build(table_builder),
84        }
85    }
86
87    /// Build corresponding SQL statement for certain database backend and return SQL string
88    pub fn to_string<T>(&self, table_builder: T) -> String
89    where
90        T: SchemaBuilder,
91    {
92        match self {
93            Self::Create(stat) => stat.to_string(table_builder),
94            Self::Alter(stat) => stat.to_string(table_builder),
95            Self::Drop(stat) => stat.to_string(table_builder),
96            Self::Rename(stat) => stat.to_string(table_builder),
97            Self::Truncate(stat) => stat.to_string(table_builder),
98        }
99    }
100}