feat: Update database version to 9 and implement migration to clear large blob attachments

This commit is contained in:
k1ngsterr1
2026-01-26 15:04:55 +05:00
parent 25814f7de7
commit 7f3edd2ad8

View File

@@ -15,7 +15,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
BlacklistEntity::class,
AvatarCacheEntity::class
],
version = 8,
version = 9,
exportSchema = false
)
abstract class RosettaDatabase : RoomDatabase() {
@@ -66,6 +66,23 @@ abstract class RosettaDatabase : RoomDatabase() {
database.execSQL("DROP TABLE IF EXISTS avatar_delivery")
}
}
/**
* 🔥 МИГРАЦИЯ 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 {
return INSTANCE ?: synchronized(this) {
@@ -75,7 +92,7 @@ abstract class RosettaDatabase : RoomDatabase() {
"rosetta_secure.db"
)
.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() // Для разработки - только если миграция не найдена
.build()
INSTANCE = instance