diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt index 8dba74d7c..2b63d7962 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -168,6 +168,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data db.beginTransaction() try { migrate(context, db, oldVersion, newVersion) + db.version = newVersion db.setTransactionSuccessful() } finally { db.endTransaction() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt index a5596c365..c5b44c04b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.delete import org.signal.core.util.logging.Log @@ -19,6 +20,13 @@ object V166_ThreadAndMessageForeignKeys : SignalDatabaseMigration { private val TAG = Log.tag(V166_ThreadAndMessageForeignKeys::class.java) override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + // Some crashes we were seeing indicated that we may have been running this migration twice on some unlucky devices, likely due + // to some gaps that were left between some transactions during the upgrade path. + if (!SqlUtil.columnExists(db, "thread", "thread_recipient_id")) { + Log.w(TAG, "Migration must have already run! Skipping.") + return + } + val stopwatch = Stopwatch("migration") removeDuplicateThreadEntries(db)