fix: another sqlx migrations fix

This commit is contained in:
2025-07-08 04:59:33 +03:00
parent 1e8e001eb8
commit 006fd7c7f5

View File

@@ -3,6 +3,7 @@ use sqlx::sqlite::{
SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions, SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions,
}; };
use sqlx::{Pool, Sqlite}; use sqlx::{Pool, Sqlite};
use tokio::time::Instant;
use std::str::FromStr; use std::str::FromStr;
use std::time::Duration; use std::time::Duration;
@@ -17,8 +18,10 @@ pub(crate) async fn connect() -> crate::Result<Pool<Sqlite>> {
crate::util::io::create_dir_all(&settings_dir).await?; crate::util::io::create_dir_all(&settings_dir).await?;
} }
let uri = format!("sqlite:{}", settings_dir.join("app.db").display()); let db_path = settings_dir.join("app.db");
let db_exists = db_path.exists();
let uri = format!("sqlite:{}", db_path.display());
let conn_options = SqliteConnectOptions::from_str(&uri)? let conn_options = SqliteConnectOptions::from_str(&uri)?
.busy_timeout(Duration::from_secs(30)) .busy_timeout(Duration::from_secs(30))
.journal_mode(SqliteJournalMode::Wal) .journal_mode(SqliteJournalMode::Wal)
@@ -30,10 +33,16 @@ pub(crate) async fn connect() -> crate::Result<Pool<Sqlite>> {
.connect_with(conn_options) .connect_with(conn_options)
.await?; .await?;
fix_modrinth_issued_migrations(&pool).await?; // Patch by AstralRinth - 08.07.2025 if db_exists {
fix_modrinth_issued_migrations(&pool).await?;
}
sqlx::migrate!().run(&pool).await?; sqlx::migrate!().run(&pool).await?;
if !db_exists {
fix_modrinth_issued_migrations(&pool).await?;
}
if let Err(err) = stale_data_cleanup(&pool).await { if let Err(err) = stale_data_cleanup(&pool).await {
tracing::warn!( tracing::warn!(
"Failed to clean up stale data from state database: {err}" "Failed to clean up stale data from state database: {err}"
@@ -72,56 +81,55 @@ Problem files:
/packages/app-lib/migrations/20240930001852_disable-personalized-ads.sql !eol /packages/app-lib/migrations/20240930001852_disable-personalized-ads.sql !eol
/packages/app-lib/migrations/20241222013857_feature-flags.sql !eol /packages/app-lib/migrations/20241222013857_feature-flags.sql !eol
*/ */
async fn fix_modrinth_issued_migrations(pool: &Pool<Sqlite>) -> crate::Result<()> { async fn fix_modrinth_issued_migrations(
const FIX_INIT: &str = "20240711194701"; pool: &Pool<Sqlite>,
const FIX_DROP_ACTIVE_UNIQUE: &str = "20240813205023"; ) -> crate::Result<()> {
const FIX_DISABLE_PERSONALIZED_ADS: &str = "20240930001852"; let started = Instant::now();
const FIX_FEATURE_FLAGS: &str = "20241222013857";
tracing::info!("Fixing modrinth issued migrations"); tracing::info!("Fixing modrinth issued migrations");
sqlx::query( sqlx::query(
r#" r#"
UPDATE "_sqlx_migrations" UPDATE "_sqlx_migrations"
SET checksum = X'e973512979feac07e415405291eefafc1ef0bd89454958ad66f5452c381db8679c20ffadab55194ecf6ba8ec4ca2db21' SET checksum = X'e973512979feac07e415405291eefafc1ef0bd89454958ad66f5452c381db8679c20ffadab55194ecf6ba8ec4ca2db21'
WHERE version = '$1'; WHERE version = '20240711194701';
"#, "#,
) )
.bind(FIX_INIT)
.execute(pool) .execute(pool)
.await?; .await?;
tracing::info!("Fixed first migration"); tracing::info!("⚙️ Fixed first migration");
sqlx::query( sqlx::query(
r#" r#"
UPDATE "_sqlx_migrations" UPDATE "_sqlx_migrations"
SET checksum = X'5b53534a7ffd74eebede234222be47e1d37bd0cc5fee4475212491b0c0379c16e3079e08eee0af959b1fa20835eeb206' SET checksum = X'5b53534a7ffd74eebede234222be47e1d37bd0cc5fee4475212491b0c0379c16e3079e08eee0af959b1fa20835eeb206'
WHERE version = '$1'; WHERE version = '20240813205023';
"#, "#,
) )
.bind(FIX_DROP_ACTIVE_UNIQUE)
.execute(pool) .execute(pool)
.await?; .await?;
tracing::info!("Fixed second migration"); tracing::info!("⚙️ Fixed second migration");
sqlx::query( sqlx::query(
r#" r#"
UPDATE "_sqlx_migrations" UPDATE "_sqlx_migrations"
SET checksum = X'c0de804f171b5530010edae087a6e75645c0e90177e28365f935c9fdd9a5c68e24850b8c1498e386a379d525d520bc57' SET checksum = X'c0de804f171b5530010edae087a6e75645c0e90177e28365f935c9fdd9a5c68e24850b8c1498e386a379d525d520bc57'
WHERE version = '$1'; WHERE version = '20240930001852';
"#, "#,
) )
.bind(FIX_DISABLE_PERSONALIZED_ADS)
.execute(pool) .execute(pool)
.await?; .await?;
tracing::info!("Fixed third migration"); tracing::info!("⚙️ Fixed third migration");
sqlx::query( sqlx::query(
r#" r#"
UPDATE "_sqlx_migrations" UPDATE "_sqlx_migrations"
SET checksum = X'c17542cb989a0466153e695bfa4717f8970feee185ca186a2caa1f2f6c5d4adb990ab97c26cacfbbe09c39ac81551704' SET checksum = X'c17542cb989a0466153e695bfa4717f8970feee185ca186a2caa1f2f6c5d4adb990ab97c26cacfbbe09c39ac81551704'
WHERE version = '$1'; WHERE version = '20241222013857';
"#, "#,
) )
.bind(FIX_FEATURE_FLAGS)
.execute(pool) .execute(pool)
.await?; .await?;
tracing::info!("Fixed fourth migration"); tracing::info!("⚙️ Fixed fourth migration");
tracing::info!("Fixed all known modrinth issued migrations"); let elapsed = started.elapsed();
tracing::info!(
"✅ Fixed all known modrinth-issued migrations in {:.2?}",
elapsed
);
Ok(()) Ok(())
} }