summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.sqlx/query-58db060ed86a4b4d9aa18078368e99be78ecea12b8600a20068bec69d0836f7c.json12
-rw-r--r--migrations/20241009031441_login_created_at.sql3
-rw-r--r--src/db/mod.rs34
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 {