Disable foreign key constraints during backup restore upgrades.

This commit is contained in:
Greyson Parrelli
2023-05-17 18:43:46 -04:00
parent 13248506c5
commit 0f4fbc7e5b

View File

@@ -6,7 +6,6 @@ import androidx.annotation.VisibleForTesting
import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.signal.core.util.withinTransaction
import org.thoughtcrime.securesms.crypto.AttachmentSecret
import org.thoughtcrime.securesms.crypto.DatabaseSecret
import org.thoughtcrime.securesms.crypto.MasterSecret
@@ -278,9 +277,11 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
@JvmStatic
fun runPostBackupRestoreTasks(database: net.zetetic.database.sqlcipher.SQLiteDatabase) {
synchronized(SignalDatabase::class.java) {
database.withinTransaction { db ->
instance!!.onUpgrade(db, db.getVersion(), -1)
instance!!.markCurrent(db)
database.setForeignKeyConstraintsEnabled(false)
database.beginTransaction()
try {
instance!!.onUpgrade(database, database.getVersion(), -1)
instance!!.markCurrent(database)
instance!!.messageTable.deleteAbandonedMessages()
instance!!.messageTable.trimEntriesForExpiredMessages()
instance!!.reactionTable.deleteAbandonedReactions()
@@ -290,6 +291,10 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS job_spec")
instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS constraint_spec")
instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS dependency_spec")
database.setTransactionSuccessful()
} finally {
database.endTransaction()
database.setForeignKeyConstraintsEnabled(true)
}
instance!!.rawWritableDatabase.close()