diff --git a/migra-cli/src/database/clients/mysql.rs b/migra-cli/src/database/clients/mysql.rs index 2f53aa5..6453230 100644 --- a/migra-cli/src/database/clients/mysql.rs +++ b/migra-cli/src/database/clients/mysql.rs @@ -17,11 +17,14 @@ impl OpenDatabaseConnection for MySqlConnection { } impl DatabaseStatements for MySqlConnection { - fn create_migration_table_stmt(&self) -> &'static str { - r#"CREATE TABLE IF NOT EXISTS migrations ( - id int AUTO_INCREMENT PRIMARY KEY, - name varchar(256) NOT NULL UNIQUE - )"# + fn create_migration_table_stmt(&self, migrations_table_name: &str) -> String { + format!( + r#"CREATE TABLE IF NOT EXISTS {} ( + id int AUTO_INCREMENT PRIMARY KEY, + name varchar(256) NOT NULL UNIQUE + )"#, + migrations_table_name + ) } } diff --git a/migra-cli/src/database/clients/postgres.rs b/migra-cli/src/database/clients/postgres.rs index 23b53a4..fb4a16c 100644 --- a/migra-cli/src/database/clients/postgres.rs +++ b/migra-cli/src/database/clients/postgres.rs @@ -15,11 +15,14 @@ impl OpenDatabaseConnection for PostgresConnection { } impl DatabaseStatements for PostgresConnection { - fn create_migration_table_stmt(&self) -> &'static str { - r#"CREATE TABLE IF NOT EXISTS migrations ( - id serial PRIMARY KEY, - name text NOT NULL UNIQUE - )"# + fn create_migration_table_stmt(&self, migrations_table_name: &str) -> String { + format!( + r#"CREATE TABLE IF NOT EXISTS {} ( + id serial PRIMARY KEY, + name text NOT NULL UNIQUE + )"#, + migrations_table_name + ) } } diff --git a/migra-cli/src/database/connection.rs b/migra-cli/src/database/connection.rs index 6fa68e4..76e1260 100644 --- a/migra-cli/src/database/connection.rs +++ b/migra-cli/src/database/connection.rs @@ -10,7 +10,7 @@ pub trait OpenDatabaseConnection: Sized { } pub trait DatabaseStatements { - fn create_migration_table_stmt(&self) -> &'static str; + fn create_migration_table_stmt(&self, migrations_table_name: &str) -> String; } pub trait SupportsTransactionalDdl { diff --git a/migra-cli/src/database/migration.rs b/migra-cli/src/database/migration.rs index e6b1657..cc99763 100644 --- a/migra-cli/src/database/migration.rs +++ b/migra-cli/src/database/migration.rs @@ -50,11 +50,15 @@ impl Migration { } #[derive(Debug)] -pub struct MigrationManager; +pub struct MigrationManager { + migrations_table_name: String, +} impl MigrationManager { pub fn new() -> Self { - MigrationManager + MigrationManager { + migrations_table_name: String::from("migrations"), + } } } @@ -109,21 +113,39 @@ impl ManageMigration for MigrationManager { } fn create_migrations_table(&self, conn: &mut AnyConnection) -> StdResult<()> { - let stmt = conn.create_migration_table_stmt(); + let stmt = conn.create_migration_table_stmt(&self.migrations_table_name); conn.batch_execute(&stmt) } fn insert_migration_info(&self, conn: &mut AnyConnection, name: &str) -> StdResult { - conn.execute("INSERT INTO migrations (name) VALUES ($1)", &[&name]) + conn.execute( + &format!( + "INSERT INTO {} (name) VALUES ($1)", + &self.migrations_table_name + ), + &[&name], + ) } fn delete_migration_info(&self, conn: &mut AnyConnection, name: &str) -> StdResult { - conn.execute("DELETE FROM migrations WHERE name = $1", &[&name]) + conn.execute( + &format!( + "DELETE FROM {} WHERE name = $1", + &self.migrations_table_name + ), + &[&name], + ) } fn applied_migration_names(&self, conn: &mut AnyConnection) -> StdResult> { let res = conn - .query("SELECT name FROM migrations ORDER BY id DESC", &[]) + .query( + &format!( + "SELECT name FROM {} ORDER BY id DESC", + &self.migrations_table_name + ), + &[], + ) .or_else(|e| { if is_migrations_table_not_found(&e) { Ok(Vec::new())