diff options
Diffstat (limited to 'src/db/mod.rs')
| -rw-r--r-- | src/db/mod.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 36d888f..fa3d74e 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -19,6 +19,15 @@ pub async fn prepare(url: &str, backup_url: &str) -> Result<SqlitePool, Error> { // 9bd6d9862b1c243def02200bca2cfbf578ad2a2f or earlier. reject_migration(&pool, "20240831024047", "login", &hex!("9949D238C4099295EC4BEE734BFDA8D87513B2973DFB895352A11AB01DD46CB95314B7F1B3431B77E3444A165FE3DC28")).await?; + // Original version of this migration was buggy, but didn't require a + // database reset to fix. + migration_replaced( + &pool, + "20241009031441", + &hex!("4B5873397C8BA9CFAF49172EE6DE455CD643A27BD71032ECD8EFA7684362FE620A8F6B27D493AF8D9A570C38CC1A6416"), + &hex!("E5CDEDA38F2BCE4C24A45E58D3BDE3FF2C30B1431C3B01870BB9DEB142E5A200B9C850C3C72A45D352C15D8DB51B8467"), + ).await?; + let backup_pool = create(backup_url).await?; backup::Backup::from(&pool) .to(&backup_pool) @@ -67,6 +76,31 @@ async fn reject_migration( Ok(()) } +async fn migration_replaced( + pool: &SqlitePool, + version: &str, + original: &[u8], + replacement: &[u8], +) -> Result<(), sqlx::Error> { + let mut conn = pool.acquire().await?; + conn.ensure_migrations_table().await?; + sqlx::query!( + r#" + update _sqlx_migrations + set checksum = $1 + where version = $2 + and checksum = $3 + "#, + replacement, + version, + original, + ) + .execute(&mut *conn) + .await?; + + Ok(()) +} + /// Errors occurring during database setup. #[derive(Debug, thiserror::Error)] pub enum Error { |
