mirror of
https://github.com/pawelorzech/Swoosh.git
synced 2026-04-01 04:15:42 +00:00
fix: bump Room DB to version 3 with safe migrations from v1 and v2
This commit is contained in:
parent
48127bffbe
commit
aaebc61156
1 changed files with 22 additions and 10 deletions
|
|
@ -9,7 +9,7 @@ import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import com.swoosh.microblog.data.model.LocalPost
|
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)
|
@TypeConverters(Converters::class)
|
||||||
abstract class AppDatabase : RoomDatabase() {
|
abstract class AppDatabase : RoomDatabase() {
|
||||||
|
|
||||||
|
|
@ -19,17 +19,29 @@ abstract class AppDatabase : RoomDatabase() {
|
||||||
@Volatile
|
@Volatile
|
||||||
private var INSTANCE: AppDatabase? = null
|
private var INSTANCE: AppDatabase? = null
|
||||||
|
|
||||||
val MIGRATION_1_2 = object : Migration(1, 2) {
|
private fun addColumnsIfMissing(db: SupportSQLiteDatabase) {
|
||||||
override fun migrate(db: SupportSQLiteDatabase) {
|
// Safely add columns - ignore if they already exist
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN imageAlt TEXT DEFAULT NULL")
|
val columns = listOf(
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN featured INTEGER NOT NULL DEFAULT 0")
|
"ALTER TABLE local_posts ADD COLUMN imageAlt TEXT DEFAULT NULL",
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'")
|
"ALTER TABLE local_posts ADD COLUMN featured INTEGER NOT NULL DEFAULT 0",
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN imageUris TEXT DEFAULT NULL")
|
"ALTER TABLE local_posts ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'",
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN uploadedImageUrls TEXT DEFAULT NULL")
|
"ALTER TABLE local_posts ADD COLUMN imageUris TEXT DEFAULT NULL",
|
||||||
db.execSQL("ALTER TABLE local_posts ADD COLUMN accountId TEXT NOT NULL DEFAULT ''")
|
"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 {
|
fun getInstance(context: Context): AppDatabase {
|
||||||
return INSTANCE ?: synchronized(this) {
|
return INSTANCE ?: synchronized(this) {
|
||||||
val instance = Room.databaseBuilder(
|
val instance = Room.databaseBuilder(
|
||||||
|
|
@ -37,7 +49,7 @@ abstract class AppDatabase : RoomDatabase() {
|
||||||
AppDatabase::class.java,
|
AppDatabase::class.java,
|
||||||
"swoosh_database"
|
"swoosh_database"
|
||||||
)
|
)
|
||||||
.addMigrations(MIGRATION_1_2)
|
.addMigrations(MIGRATION_1_3, MIGRATION_2_3)
|
||||||
.fallbackToDestructiveMigration()
|
.fallbackToDestructiveMigration()
|
||||||
.build()
|
.build()
|
||||||
INSTANCE = instance
|
INSTANCE = instance
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue