vespertide_query/sql/
rename_table.rs

1use sea_query::{Alias, Table};
2
3use super::types::BuiltQuery;
4
5pub fn build_rename_table(from: &str, to: &str) -> BuiltQuery {
6    let stmt = Table::rename()
7        .table(Alias::new(from), Alias::new(to))
8        .to_owned();
9    BuiltQuery::RenameTable(Box::new(stmt))
10}
11
12#[cfg(test)]
13mod tests {
14    use super::*;
15    use crate::sql::types::DatabaseBackend;
16    use insta::{assert_snapshot, with_settings};
17    use rstest::rstest;
18
19    #[rstest]
20    #[case::rename_table_action_postgres(
21        "rename_table_action_postgres",
22        DatabaseBackend::Postgres,
23        &["ALTER TABLE \"users\" RENAME TO \"accounts\""]
24    )]
25    #[case::rename_table_action_mysql(
26        "rename_table_action_mysql",
27        DatabaseBackend::MySql,
28        &["RENAME TABLE `users` TO `accounts`"]
29    )]
30    #[case::rename_table_action_sqlite(
31        "rename_table_action_sqlite",
32        DatabaseBackend::Sqlite,
33        &["ALTER TABLE \"users\" RENAME TO \"accounts\""]
34    )]
35    fn test_rename_table(
36        #[case] title: &str,
37        #[case] backend: DatabaseBackend,
38        #[case] expected: &[&str],
39    ) {
40        let result = build_rename_table("users", "accounts");
41        let sql = result.build(backend);
42        for exp in expected {
43            assert!(
44                sql.contains(exp),
45                "Expected SQL to contain '{}', got: {}",
46                exp,
47                sql
48            );
49        }
50
51        with_settings!({ snapshot_suffix => format!("rename_table_{}", title) }, {
52            assert_snapshot!(sql);
53        });
54    }
55}