Avoid taking a transaction in RemappedRecordTables.
This commit is contained in:
parent
56af57db9e
commit
6399a2d899
@ -4,6 +4,7 @@ import android.content.Context
|
||||
import android.database.Cursor
|
||||
import androidx.core.content.contentValuesOf
|
||||
import org.signal.core.util.delete
|
||||
import org.signal.core.util.exists
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.signal.core.util.readToList
|
||||
import org.signal.core.util.requireLong
|
||||
@ -78,9 +79,20 @@ class RemappedRecordTables internal constructor(context: Context?, databaseHelpe
|
||||
}
|
||||
|
||||
fun trimStaleMappings() {
|
||||
val hasStaleRecipients = hasInvalidEntries(Recipients.TABLE_NAME, RecipientTable.TABLE_NAME)
|
||||
val hasStaleThreads = hasInvalidEntries(Threads.TABLE_NAME, ThreadTable.TABLE_NAME)
|
||||
|
||||
if (!hasStaleRecipients && !hasStaleThreads) {
|
||||
return
|
||||
}
|
||||
|
||||
writableDatabase.withinTransaction { db ->
|
||||
trimInvalidRecipientEntries(db)
|
||||
trimInvalidThreadEntries(db)
|
||||
if (hasStaleRecipients) {
|
||||
trimInvalidRecipientEntries(db)
|
||||
}
|
||||
if (hasStaleThreads) {
|
||||
trimInvalidThreadEntries(db)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,6 +128,13 @@ class RemappedRecordTables internal constructor(context: Context?, databaseHelpe
|
||||
RemappedRecords.getInstance().resetCache()
|
||||
}
|
||||
|
||||
private fun hasInvalidEntries(table: String, sourceTable: String): Boolean {
|
||||
return readableDatabase
|
||||
.exists(table)
|
||||
.where("$OLD_ID IN (SELECT $ID FROM $sourceTable)")
|
||||
.run()
|
||||
}
|
||||
|
||||
private fun trimInvalidRecipientEntries(db: SQLiteDatabase) {
|
||||
val count = db.delete(Recipients.TABLE_NAME)
|
||||
.where("$OLD_ID IN (SELECT $ID FROM ${RecipientTable.TABLE_NAME})")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user