sea_query/table/
rename.rs

1use inherent::inherent;
2
3use crate::{backend::SchemaBuilder, types::*, SchemaStatementBuilder};
4
5/// Rename a table
6///
7/// # Examples
8///
9/// ```
10/// use sea_query::{tests_cfg::*, *};
11///
12/// let table = Table::rename()
13///     .table(Font::Table, Alias::new("font_new"))
14///     .to_owned();
15///
16/// assert_eq!(
17///     table.to_string(MysqlQueryBuilder),
18///     r#"RENAME TABLE `font` TO `font_new`"#
19/// );
20/// assert_eq!(
21///     table.to_string(PostgresQueryBuilder),
22///     r#"ALTER TABLE "font" RENAME TO "font_new""#
23/// );
24/// assert_eq!(
25///     table.to_string(SqliteQueryBuilder),
26///     r#"ALTER TABLE "font" RENAME TO "font_new""#
27/// );
28/// ```
29#[derive(Default, Debug, Clone)]
30pub struct TableRenameStatement {
31    pub(crate) from_name: Option<TableRef>,
32    pub(crate) to_name: Option<TableRef>,
33}
34
35impl TableRenameStatement {
36    /// Construct rename table statement
37    pub fn new() -> Self {
38        Self::default()
39    }
40
41    /// Set old and new table name
42    pub fn table<T, R>(&mut self, from_name: T, to_name: R) -> &mut Self
43    where
44        T: IntoTableRef,
45        R: IntoTableRef,
46    {
47        self.from_name = Some(from_name.into_table_ref());
48        self.to_name = Some(to_name.into_table_ref());
49        self
50    }
51
52    pub fn take(&mut self) -> Self {
53        Self {
54            from_name: self.from_name.take(),
55            to_name: self.to_name.take(),
56        }
57    }
58}
59
60#[inherent]
61impl SchemaStatementBuilder for TableRenameStatement {
62    pub fn build<T: SchemaBuilder>(&self, schema_builder: T) -> String {
63        let mut sql = String::with_capacity(256);
64        schema_builder.prepare_table_rename_statement(self, &mut sql);
65        sql
66    }
67
68    pub fn build_any(&self, schema_builder: &dyn SchemaBuilder) -> String {
69        let mut sql = String::with_capacity(256);
70        schema_builder.prepare_table_rename_statement(self, &mut sql);
71        sql
72    }
73
74    pub fn to_string<T: SchemaBuilder>(&self, schema_builder: T) -> String;
75}