vespertide-query 0.1.61

Converts migration actions into SQL statements with bind parameters
Documentation
use sea_query::{Alias, Table};

use super::types::BuiltQuery;

pub fn build_delete_table(table: &str) -> BuiltQuery {
    let stmt = Table::drop().table(Alias::new(table)).to_owned();
    BuiltQuery::DropTable(Box::new(stmt))
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::sql::types::DatabaseBackend;
    use insta::{assert_snapshot, with_settings};
    use rstest::rstest;

    #[rstest]
    #[case::delete_table_postgres(
        "delete_table_postgres",
        DatabaseBackend::Postgres,
        &["DROP TABLE \"users\""]
    )]
    #[case::delete_table_mysql(
        "delete_table_mysql",
        DatabaseBackend::MySql,
        &["DROP TABLE `users`"]
    )]
    #[case::delete_table_sqlite(
        "delete_table_sqlite",
        DatabaseBackend::Sqlite,
        &["DROP TABLE \"users\""]
    )]
    fn test_delete_table(
        #[case] title: &str,
        #[case] backend: DatabaseBackend,
        #[case] expected: &[&str],
    ) {
        let result = build_delete_table("users");
        let sql = result.build(backend);
        for exp in expected {
            assert!(
                sql.contains(exp),
                "Expected SQL to contain '{}', got: {}",
                exp,
                sql
            );
        }

        with_settings!({ snapshot_suffix => format!("delete_table_{}", title) }, {
            assert_snapshot!(sql);
        });
    }
}