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