vespertide_query/sql/
delete_table.rs

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