diff options
| -rw-r--r-- | .sqlx/query-58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c.json | 12 | ||||
| -rw-r--r-- | migrations/20241009031441_login_created_at.sql | 3 | ||||
| -rw-r--r-- | src/db/mod.rs | 34 |
3 files changed, 48 insertions, 1 deletions
diff --git a/.sqlx/query-58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c.json b/.sqlx/query-58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c.json new file mode 100644 index 0000000..960fdb4 --- /dev/null +++ b/.sqlx/query-58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "\n update _sqlx_migrations\n set checksum = $1\n where version = $2\n and checksum = $3\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 3 + }, + "nullable": [] + }, + "hash": "58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c" +} diff --git a/migrations/20241009031441_login_created_at.sql b/migrations/20241009031441_login_created_at.sql index 001c48e..bef4c28 100644 --- a/migrations/20241009031441_login_created_at.sql +++ b/migrations/20241009031441_login_created_at.sql @@ -41,7 +41,8 @@ select login.id from login left join message - on login.id = message.sender; + on login.id = message.sender +group by login.id; insert into unsequenced (at, channel) select created_at, id 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 { |
