mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 12:38:33 +00:00
Specify indexes for mention table queries.
This commit is contained in:
@@ -36,9 +36,12 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
private const val MESSAGE_ID_INDEX = "mention_message_id_index"
|
||||||
|
private const val RECIPIENT_ID_INDEX = "mention_recipient_id_thread_id_index "
|
||||||
|
|
||||||
val CREATE_INDEXES = arrayOf(
|
val CREATE_INDEXES = arrayOf(
|
||||||
"CREATE INDEX IF NOT EXISTS mention_message_id_index ON $TABLE_NAME ($MESSAGE_ID);",
|
"CREATE INDEX IF NOT EXISTS $MESSAGE_ID_INDEX ON $TABLE_NAME ($MESSAGE_ID);",
|
||||||
"CREATE INDEX IF NOT EXISTS mention_recipient_id_thread_id_index ON $TABLE_NAME ($RECIPIENT_ID, $THREAD_ID);"
|
"CREATE INDEX IF NOT EXISTS $RECIPIENT_ID_INDEX ON $TABLE_NAME ($RECIPIENT_ID, $THREAD_ID);"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +64,7 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
fun getMentionsForMessage(messageId: Long): List<Mention> {
|
fun getMentionsForMessage(messageId: Long): List<Mention> {
|
||||||
return readableDatabase
|
return readableDatabase
|
||||||
.select()
|
.select()
|
||||||
.from(TABLE_NAME)
|
.from("$TABLE_NAME INDEXED BY $MESSAGE_ID_INDEX")
|
||||||
.where("$MESSAGE_ID = $messageId")
|
.where("$MESSAGE_ID = $messageId")
|
||||||
.run()
|
.run()
|
||||||
.readToList { cursor ->
|
.readToList { cursor ->
|
||||||
@@ -78,7 +81,7 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
|
|
||||||
return readableDatabase
|
return readableDatabase
|
||||||
.select()
|
.select()
|
||||||
.from(TABLE_NAME)
|
.from("$TABLE_NAME INDEXED BY $MESSAGE_ID_INDEX")
|
||||||
.where("$MESSAGE_ID IN ($ids)")
|
.where("$MESSAGE_ID IN ($ids)")
|
||||||
.run()
|
.run()
|
||||||
.use { cursor -> readMentions(cursor) }
|
.use { cursor -> readMentions(cursor) }
|
||||||
@@ -98,7 +101,7 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
|
|
||||||
return readableDatabase
|
return readableDatabase
|
||||||
.select()
|
.select()
|
||||||
.from(TABLE_NAME)
|
.from("$TABLE_NAME INDEXED BY $MESSAGE_ID_INDEX")
|
||||||
.where(
|
.where(
|
||||||
"""
|
"""
|
||||||
$MESSAGE_ID IN (
|
$MESSAGE_ID IN (
|
||||||
@@ -115,18 +118,18 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
|
|
||||||
fun deleteMentionsForMessage(messageId: Long) {
|
fun deleteMentionsForMessage(messageId: Long) {
|
||||||
writableDatabase
|
writableDatabase
|
||||||
.delete(TABLE_NAME)
|
.delete("$TABLE_NAME INDEXED BY $MESSAGE_ID_INDEX")
|
||||||
.where("$MESSAGE_ID = $messageId")
|
.where("$MESSAGE_ID = $messageId")
|
||||||
.run()
|
.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteAbandonedMentions() {
|
fun deleteAbandonedMentions() {
|
||||||
writableDatabase
|
writableDatabase
|
||||||
.delete(TABLE_NAME)
|
.delete("$TABLE_NAME INDEXED BY $MESSAGE_ID_INDEX")
|
||||||
.where(
|
.where(
|
||||||
"""
|
"""
|
||||||
$MESSAGE_ID NOT IN (
|
$MESSAGE_ID NOT IN (
|
||||||
SELECT $MessageTable.ID
|
SELECT ${MessageTable.ID}
|
||||||
FROM ${MessageTable.TABLE_NAME}
|
FROM ${MessageTable.TABLE_NAME}
|
||||||
)
|
)
|
||||||
OR $THREAD_ID NOT IN (
|
OR $THREAD_ID NOT IN (
|
||||||
@@ -158,7 +161,7 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
|
|
||||||
override fun remapRecipient(fromId: RecipientId, toId: RecipientId) {
|
override fun remapRecipient(fromId: RecipientId, toId: RecipientId) {
|
||||||
writableDatabase
|
writableDatabase
|
||||||
.update(TABLE_NAME)
|
.update("$TABLE_NAME INDEXED BY $RECIPIENT_ID_INDEX")
|
||||||
.values(RECIPIENT_ID to toId.serialize())
|
.values(RECIPIENT_ID to toId.serialize())
|
||||||
.where("$RECIPIENT_ID = ?", fromId)
|
.where("$RECIPIENT_ID = ?", fromId)
|
||||||
.run()
|
.run()
|
||||||
@@ -166,7 +169,7 @@ class MentionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseT
|
|||||||
|
|
||||||
override fun remapThread(fromId: Long, toId: Long) {
|
override fun remapThread(fromId: Long, toId: Long) {
|
||||||
writableDatabase
|
writableDatabase
|
||||||
.update(TABLE_NAME)
|
.update("$TABLE_NAME INDEXED BY $RECIPIENT_ID_INDEX")
|
||||||
.values(THREAD_ID to toId)
|
.values(THREAD_ID to toId)
|
||||||
.where("$THREAD_ID = $fromId")
|
.where("$THREAD_ID = $fromId")
|
||||||
.run()
|
.run()
|
||||||
|
|||||||
Reference in New Issue
Block a user