mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +00:00
Attempt to fix SQLite crash in migration.
This commit is contained in:
@@ -20,6 +20,7 @@ import org.signal.core.util.requireInt
|
|||||||
import org.signal.core.util.requireLong
|
import org.signal.core.util.requireLong
|
||||||
import org.signal.core.util.requireString
|
import org.signal.core.util.requireString
|
||||||
import org.signal.core.util.select
|
import org.signal.core.util.select
|
||||||
|
import org.signal.core.util.toSingleLine
|
||||||
import org.signal.core.util.update
|
import org.signal.core.util.update
|
||||||
import org.signal.core.util.withinTransaction
|
import org.signal.core.util.withinTransaction
|
||||||
import org.signal.libsignal.zkgroup.InvalidInputException
|
import org.signal.libsignal.zkgroup.InvalidInputException
|
||||||
@@ -1639,10 +1640,6 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
|
|||||||
return Reader(cursor)
|
return Reader(cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun String.toSingleLine(): String {
|
|
||||||
return this.trimIndent().split("\n").joinToString(separator = " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun ConversationFilter.toQuery(): String {
|
private fun ConversationFilter.toQuery(): String {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
ConversationFilter.OFF -> ""
|
ConversationFilter.OFF -> ""
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.signal.core.util.delete
|
|||||||
import org.signal.core.util.logging.Log
|
import org.signal.core.util.logging.Log
|
||||||
import org.signal.core.util.readToList
|
import org.signal.core.util.readToList
|
||||||
import org.signal.core.util.requireLong
|
import org.signal.core.util.requireLong
|
||||||
|
import org.signal.core.util.toSingleLine
|
||||||
import org.signal.core.util.update
|
import org.signal.core.util.update
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +50,7 @@ object V166_ThreadAndMessageForeignKeys : SignalDatabaseMigration {
|
|||||||
COUNT(*) AS thread_count
|
COUNT(*) AS thread_count
|
||||||
FROM thread
|
FROM thread
|
||||||
GROUP BY thread_recipient_id HAVING thread_count > 1
|
GROUP BY thread_recipient_id HAVING thread_count > 1
|
||||||
""".trimMargin()
|
""".toSingleLine()
|
||||||
).use { cursor ->
|
).use { cursor ->
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
val recipientId = cursor.requireLong("thread_recipient_id")
|
val recipientId = cursor.requireLong("thread_recipient_id")
|
||||||
|
|||||||
@@ -21,3 +21,20 @@ fun String.asListContains(item: String): Boolean {
|
|||||||
.map { it.substring(0, it.length - 1) }
|
.map { it.substring(0, it.length - 1) }
|
||||||
.any { item.startsWith(it) }
|
.any { item.startsWith(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns a multi-line string into a single-line string stripped of indentation, separated by spaces instead of newlines.
|
||||||
|
*
|
||||||
|
* e.g.
|
||||||
|
*
|
||||||
|
* a
|
||||||
|
* b
|
||||||
|
* c
|
||||||
|
*
|
||||||
|
* turns into
|
||||||
|
*
|
||||||
|
* a b c
|
||||||
|
*/
|
||||||
|
fun String.toSingleLine(): String {
|
||||||
|
return this.trimIndent().split("\n").joinToString(separator = " ")
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user