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