mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-22 12:08:34 +00:00
Fix potentially slow migration query.
This commit is contained in:
@@ -284,6 +284,8 @@ class AttachmentTable(
|
|||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
private const val DATA_FILE_INDEX = "attachment_data_index"
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
val CREATE_INDEXS = arrayOf(
|
val CREATE_INDEXS = arrayOf(
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_message_id_index ON $TABLE_NAME ($MESSAGE_ID);",
|
"CREATE INDEX IF NOT EXISTS attachment_message_id_index ON $TABLE_NAME ($MESSAGE_ID);",
|
||||||
@@ -291,7 +293,7 @@ class AttachmentTable(
|
|||||||
"CREATE INDEX IF NOT EXISTS attachment_sticker_pack_id_index ON $TABLE_NAME ($STICKER_PACK_ID);",
|
"CREATE INDEX IF NOT EXISTS attachment_sticker_pack_id_index ON $TABLE_NAME ($STICKER_PACK_ID);",
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_data_hash_start_index ON $TABLE_NAME ($DATA_HASH_START);",
|
"CREATE INDEX IF NOT EXISTS attachment_data_hash_start_index ON $TABLE_NAME ($DATA_HASH_START);",
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_data_hash_end_index ON $TABLE_NAME ($DATA_HASH_END);",
|
"CREATE INDEX IF NOT EXISTS attachment_data_hash_end_index ON $TABLE_NAME ($DATA_HASH_END);",
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_data_index ON $TABLE_NAME ($DATA_FILE);",
|
"CREATE INDEX IF NOT EXISTS $DATA_FILE_INDEX ON $TABLE_NAME ($DATA_FILE);",
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_archive_media_id_index ON $TABLE_NAME ($ARCHIVE_MEDIA_ID);",
|
"CREATE INDEX IF NOT EXISTS attachment_archive_media_id_index ON $TABLE_NAME ($ARCHIVE_MEDIA_ID);",
|
||||||
"CREATE INDEX IF NOT EXISTS attachment_archive_transfer_state ON $TABLE_NAME ($ARCHIVE_TRANSFER_STATE);"
|
"CREATE INDEX IF NOT EXISTS attachment_archive_transfer_state ON $TABLE_NAME ($ARCHIVE_TRANSFER_STATE);"
|
||||||
)
|
)
|
||||||
@@ -1420,24 +1422,24 @@ class AttachmentTable(
|
|||||||
* This is basically all attachments that have data and are finished downloading.
|
* This is basically all attachments that have data and are finished downloading.
|
||||||
*/
|
*/
|
||||||
fun getDataFilesWithMultipleValidAttachments(): List<String> {
|
fun getDataFilesWithMultipleValidAttachments(): List<String> {
|
||||||
val targetDataFile = "target_data_file"
|
|
||||||
return readableDatabase
|
return readableDatabase
|
||||||
.select("DISTINCT($DATA_FILE) AS $targetDataFile")
|
.select("DISTINCT(a1.$DATA_FILE)")
|
||||||
.from(TABLE_NAME)
|
.from("$TABLE_NAME a1 INDEXED BY $DATA_FILE_INDEX")
|
||||||
.where(
|
.where(
|
||||||
"""
|
"""
|
||||||
$targetDataFile NOT NULL AND
|
a1.$DATA_FILE NOT NULL AND
|
||||||
$TRANSFER_STATE = $TRANSFER_PROGRESS_DONE AND (
|
a1.$TRANSFER_STATE = $TRANSFER_PROGRESS_DONE AND EXISTS (
|
||||||
SELECT COUNT(*)
|
SELECT 1
|
||||||
FROM $TABLE_NAME
|
FROM $TABLE_NAME a2 INDEXED BY $DATA_FILE_INDEX
|
||||||
WHERE
|
WHERE
|
||||||
$DATA_FILE = $targetDataFile AND
|
a1.$DATA_FILE = a2.$DATA_FILE AND
|
||||||
$TRANSFER_STATE = $TRANSFER_PROGRESS_DONE
|
a2.$TRANSFER_STATE = $TRANSFER_PROGRESS_DONE AND
|
||||||
) > 1
|
a2.$ID != a1.$ID
|
||||||
|
)
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
.run()
|
.run()
|
||||||
.readToList { it.requireNonNullString(targetDataFile) }
|
.readToList { it.requireNonNullString(DATA_FILE) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user