From 21a8434e4d877b311610482e7e88d7bed7d2626a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 13 Dec 2022 10:59:27 -0500 Subject: [PATCH] Attempt to fix SQLite crash in migration. --- .../securesms/database/ThreadTable.kt | 5 +---- .../V166_ThreadAndMessageForeignKeys.kt | 3 ++- .../org/signal/core/util/StringExtensions.kt | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index 4ba5d2f26b..6cbc7267e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -20,6 +20,7 @@ import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireString import org.signal.core.util.select +import org.signal.core.util.toSingleLine import org.signal.core.util.update import org.signal.core.util.withinTransaction import org.signal.libsignal.zkgroup.InvalidInputException @@ -1639,10 +1640,6 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa return Reader(cursor) } - private fun String.toSingleLine(): String { - return this.trimIndent().split("\n").joinToString(separator = " ") - } - private fun ConversationFilter.toQuery(): String { return when (this) { ConversationFilter.OFF -> "" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt index c0c24d4e8e..a5596c3656 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt @@ -7,6 +7,7 @@ import org.signal.core.util.delete import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireLong +import org.signal.core.util.toSingleLine import org.signal.core.util.update /** @@ -49,7 +50,7 @@ object V166_ThreadAndMessageForeignKeys : SignalDatabaseMigration { COUNT(*) AS thread_count FROM thread GROUP BY thread_recipient_id HAVING thread_count > 1 - """.trimMargin() + """.toSingleLine() ).use { cursor -> while (cursor.moveToNext()) { val recipientId = cursor.requireLong("thread_recipient_id") diff --git a/core-util/src/main/java/org/signal/core/util/StringExtensions.kt b/core-util/src/main/java/org/signal/core/util/StringExtensions.kt index a7e8befdc9..c7103d24cd 100644 --- a/core-util/src/main/java/org/signal/core/util/StringExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/StringExtensions.kt @@ -21,3 +21,20 @@ fun String.asListContains(item: String): Boolean { .map { it.substring(0, it.length - 1) } .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 = " ") +} \ No newline at end of file