From aaebc61156fd3f083c4bc18dc769f35f468f2f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Orzech?= Date: Thu, 19 Mar 2026 11:31:22 +0100 Subject: [PATCH] fix: bump Room DB to version 3 with safe migrations from v1 and v2 --- .../swoosh/microblog/data/db/AppDatabase.kt | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/swoosh/microblog/data/db/AppDatabase.kt b/app/src/main/java/com/swoosh/microblog/data/db/AppDatabase.kt index c2a41cd..1e21d15 100644 --- a/app/src/main/java/com/swoosh/microblog/data/db/AppDatabase.kt +++ b/app/src/main/java/com/swoosh/microblog/data/db/AppDatabase.kt @@ -9,7 +9,7 @@ import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase import com.swoosh.microblog.data.model.LocalPost -@Database(entities = [LocalPost::class], version = 2, exportSchema = false) +@Database(entities = [LocalPost::class], version = 3, exportSchema = false) @TypeConverters(Converters::class) abstract class AppDatabase : RoomDatabase() { @@ -19,17 +19,29 @@ abstract class AppDatabase : RoomDatabase() { @Volatile private var INSTANCE: AppDatabase? = null - val MIGRATION_1_2 = object : Migration(1, 2) { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("ALTER TABLE local_posts ADD COLUMN imageAlt TEXT DEFAULT NULL") - db.execSQL("ALTER TABLE local_posts ADD COLUMN featured INTEGER NOT NULL DEFAULT 0") - db.execSQL("ALTER TABLE local_posts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'") - db.execSQL("ALTER TABLE local_posts ADD COLUMN imageUris TEXT DEFAULT NULL") - db.execSQL("ALTER TABLE local_posts ADD COLUMN uploadedImageUrls TEXT DEFAULT NULL") - db.execSQL("ALTER TABLE local_posts ADD COLUMN accountId TEXT NOT NULL DEFAULT ''") + private fun addColumnsIfMissing(db: SupportSQLiteDatabase) { + // Safely add columns - ignore if they already exist + val columns = listOf( + "ALTER TABLE local_posts ADD COLUMN imageAlt TEXT DEFAULT NULL", + "ALTER TABLE local_posts ADD COLUMN featured INTEGER NOT NULL DEFAULT 0", + "ALTER TABLE local_posts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'", + "ALTER TABLE local_posts ADD COLUMN imageUris TEXT DEFAULT NULL", + "ALTER TABLE local_posts ADD COLUMN uploadedImageUrls TEXT DEFAULT NULL", + "ALTER TABLE local_posts ADD COLUMN accountId TEXT NOT NULL DEFAULT ''" + ) + for (sql in columns) { + try { db.execSQL(sql) } catch (_: Exception) { /* column already exists */ } } } + val MIGRATION_1_3 = object : Migration(1, 3) { + override fun migrate(db: SupportSQLiteDatabase) = addColumnsIfMissing(db) + } + + val MIGRATION_2_3 = object : Migration(2, 3) { + override fun migrate(db: SupportSQLiteDatabase) = addColumnsIfMissing(db) + } + fun getInstance(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( @@ -37,7 +49,7 @@ abstract class AppDatabase : RoomDatabase() { AppDatabase::class.java, "swoosh_database" ) - .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_1_3, MIGRATION_2_3) .fallbackToDestructiveMigration() .build() INSTANCE = instance