From 2dd0221680ae2404a4bfaf63b26dd0e3550ce349 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 23 Jun 2023 09:55:24 -0400 Subject: [PATCH] Fix issue where FTS recovery path didn't work during migrations. There was a recursive getDatabase() call because it was happening during a migration. Solution was to re-use the DB instance we already had. --- .../java/org/thoughtcrime/securesms/database/SearchTable.kt | 4 +++- .../securesms/database/SqlCipherErrorHandler.kt | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt index a2837fdaad..b42c5c7ecb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Context import android.database.Cursor import android.text.TextUtils +import net.zetetic.database.sqlcipher.SQLiteDatabase import org.intellij.lang.annotations.Language import org.signal.core.util.SqlUtil import org.signal.core.util.ThreadUtil @@ -231,7 +232,8 @@ class SearchTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa /** * Drops all tables and recreates them. */ - fun fullyResetTables() { + @JvmOverloads + fun fullyResetTables(db: SQLiteDatabase = writableDatabase.sqlCipherDatabase) { Log.w(TAG, "[fullyResetTables] Dropping tables and triggers...") writableDatabase.execSQL("DROP TABLE IF EXISTS $FTS_TABLE_NAME") writableDatabase.execSQL("DROP TABLE IF EXISTS ${FTS_TABLE_NAME}_config") diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt index 890ddb897a..962aee97ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt @@ -35,7 +35,7 @@ class SqlCipherErrorHandler(private val databaseName: String) : DatabaseErrorHan endCount++ } - attemptToClearFullTextSearchIndex() + attemptToClearFullTextSearchIndex(db) throw DatabaseCorruptedError_BothChecksPass(lines) } else if (!result.pragma1Passes && result.pragma2Passes) { throw DatabaseCorruptedError_NormalCheckFailsCipherCheckPasses(lines) @@ -144,9 +144,9 @@ class SqlCipherErrorHandler(private val databaseName: String) : DatabaseErrorHan } } - private fun attemptToClearFullTextSearchIndex() { + private fun attemptToClearFullTextSearchIndex(db: SQLiteDatabase) { try { - SignalDatabase.messageSearch.fullyResetTables() + SignalDatabase.messageSearch.fullyResetTables(db) } catch (e: Throwable) { Log.w(TAG, "Failed to clear full text search index.", e) }