From 7f3edd2ad8038bb0e8737cff522dc3b1b0fbfd12 Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Mon, 26 Jan 2026 15:04:55 +0500 Subject: [PATCH] feat: Update database version to 9 and implement migration to clear large blob attachments --- .../messenger/database/RosettaDatabase.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/rosetta/messenger/database/RosettaDatabase.kt b/app/src/main/java/com/rosetta/messenger/database/RosettaDatabase.kt index dcdc10f..41b997f 100644 --- a/app/src/main/java/com/rosetta/messenger/database/RosettaDatabase.kt +++ b/app/src/main/java/com/rosetta/messenger/database/RosettaDatabase.kt @@ -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