mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-09-26 20:40:54 +00:00
fix(sqlite) Migrate revert with no-transaction (#4024)
* Fix migration reverts for no-TX SQLite * Add regression test --------- Co-authored-by: Markus Gasser <markus.gasser@frauscher.com>
This commit is contained in:
parent
81526898d4
commit
c52e129e83
@ -207,7 +207,7 @@ CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
let start = Instant::now();
|
||||
|
||||
if migration.no_tx {
|
||||
execute_migration(self, table_name, migration).await?;
|
||||
revert_migration(self, table_name, migration).await?;
|
||||
} else {
|
||||
// Use a single transaction for the actual migration script and the essential bookkeeping so we never
|
||||
// execute migrations twice. See https://github.com/launchbadge/sqlx/issues/1966.
|
||||
|
@ -77,6 +77,29 @@ async fn no_tx(mut conn: PoolConnection<Sqlite>) -> anyhow::Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[sqlx::test(migrations = false)]
|
||||
async fn no_tx_reversible(mut conn: PoolConnection<Sqlite>) -> anyhow::Result<()> {
|
||||
clean_up(&mut conn).await?;
|
||||
|
||||
let migrator = Migrator::new(Path::new("tests/sqlite/migrations_no_tx_reversible")).await?;
|
||||
|
||||
// run migration
|
||||
migrator.run(&mut conn).await?;
|
||||
|
||||
// check outcome
|
||||
let res: String = conn.fetch_one("PRAGMA JOURNAL_MODE").await?.get(0);
|
||||
assert_eq!(res, "wal".to_string());
|
||||
|
||||
// roll back
|
||||
migrator.undo(&mut conn, -1).await?;
|
||||
|
||||
// check outcome
|
||||
let res: String = conn.fetch_one("PRAGMA JOURNAL_MODE").await?.get(0);
|
||||
assert_eq!(res, "delete".to_string());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Ensure that we have a clean initial state.
|
||||
async fn clean_up(conn: &mut SqliteConnection) -> anyhow::Result<()> {
|
||||
conn.execute("DROP TABLE migrations_simple_test").await.ok();
|
||||
|
@ -0,0 +1,3 @@
|
||||
-- no-transaction
|
||||
|
||||
PRAGMA JOURNAL_MODE = DELETE;
|
3
tests/sqlite/migrations_no_tx_reversible/0_vacuum.up.sql
Normal file
3
tests/sqlite/migrations_no_tx_reversible/0_vacuum.up.sql
Normal file
@ -0,0 +1,3 @@
|
||||
-- no-transaction
|
||||
|
||||
PRAGMA JOURNAL_MODE = WAL;
|
Loading…
x
Reference in New Issue
Block a user