feat: Update database version to 9 and implement migration to clear large blob attachments
This commit is contained in:
@@ -15,7 +15,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
|
|||||||
BlacklistEntity::class,
|
BlacklistEntity::class,
|
||||||
AvatarCacheEntity::class
|
AvatarCacheEntity::class
|
||||||
],
|
],
|
||||||
version = 8,
|
version = 9,
|
||||||
exportSchema = false
|
exportSchema = false
|
||||||
)
|
)
|
||||||
abstract class RosettaDatabase : RoomDatabase() {
|
abstract class RosettaDatabase : RoomDatabase() {
|
||||||
@@ -67,6 +67,23 @@ abstract class RosettaDatabase : RoomDatabase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 🔥 МИГРАЦИЯ 8->9: Очищаем blob из attachments (как в desktop)
|
||||||
|
* Blob слишком большой для SQLite CursorWindow (2MB лимит)
|
||||||
|
* Просто обнуляем attachments - изображения перескачаются с CDN
|
||||||
|
*/
|
||||||
|
private val MIGRATION_8_9 = object : Migration(8, 9) {
|
||||||
|
override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
|
// Очищаем все attachments с большими blob'ами
|
||||||
|
// Они будут перескачаны с CDN при открытии
|
||||||
|
database.execSQL("""
|
||||||
|
UPDATE messages
|
||||||
|
SET attachments = '[]'
|
||||||
|
WHERE length(attachments) > 10000
|
||||||
|
""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getDatabase(context: Context): RosettaDatabase {
|
fun getDatabase(context: Context): RosettaDatabase {
|
||||||
return INSTANCE ?: synchronized(this) {
|
return INSTANCE ?: synchronized(this) {
|
||||||
val instance = Room.databaseBuilder(
|
val instance = Room.databaseBuilder(
|
||||||
@@ -75,7 +92,7 @@ abstract class RosettaDatabase : RoomDatabase() {
|
|||||||
"rosetta_secure.db"
|
"rosetta_secure.db"
|
||||||
)
|
)
|
||||||
.setJournalMode(JournalMode.WRITE_AHEAD_LOGGING) // WAL mode for performance
|
.setJournalMode(JournalMode.WRITE_AHEAD_LOGGING) // WAL mode for performance
|
||||||
.addMigrations(MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8)
|
.addMigrations(MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7, MIGRATION_7_8, MIGRATION_8_9)
|
||||||
.fallbackToDestructiveMigration() // Для разработки - только если миграция не найдена
|
.fallbackToDestructiveMigration() // Для разработки - только если миграция не найдена
|
||||||
.build()
|
.build()
|
||||||
INSTANCE = instance
|
INSTANCE = instance
|
||||||
|
|||||||
Reference in New Issue
Block a user