Migrate to shared class hierarchy for unit based database tests.

This commit is contained in:
Cody Henthorne authored and Greyson Parrelli committed 2025-03-04 15:58:21 -05:00
1 parent d5e18a8bd5
commit d0b6d6fdeb
138 files changed
+394 -436

No files matched your search

+1
View File
@@ -559,6 +559,7 @@ dependencies {
implementation(libs.lottie.compose)
implementation(libs.signal.android.database.sqlcipher)
implementation(libs.androidx.sqlite)
testImplementation(libs.androidx.sqlite.framework)
implementation(libs.google.ez.vcard) {
exclude(group = "com.fasterxml.jackson.core")
exclude(group = "org.freemarker")
@@ -17,6 +17,7 @@ import org.signal.core.util.requireNonNullString
import org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.testing.SignalActivityRule
import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase
/**
* A test that guarantees that a freshly-created database looks the same as one that went through the upgrade path.
@@ -128,7 +129,7 @@ class DatabaseConsistencyTest {
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
SignalDatabaseMigrations.migrate(application, db, 181, SignalDatabaseMigrations.DATABASE_VERSION)
SignalDatabaseMigrations.migrate(application, SignalSQLiteDatabase(db), 181, SignalDatabaseMigrations.DATABASE_VERSION)
}
/**
@@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.database.model.DistributionListId
import org.thoughtcrime.securesms.testing.SignalDatabaseRule
import org.whispersystems.signalservice.api.push.DistributionId
import java.util.UUID
import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase
@RunWith(AndroidJUnit4::class)
class MyStoryMigrationTest {
@@ -111,7 +112,7 @@ class MyStoryMigrationTest {
private fun runMigration() {
V151_MyStoryMigration.migrate(
InstrumentationRegistry.getInstrumentation().targetContext.applicationContext as Application,
SignalDatabase.rawDatabase,
SignalSQLiteDatabase(SignalDatabase.rawDatabase),
0,
1
)
@@ -33,7 +33,7 @@ class ChatFolderTables(context: Context?, databaseHelper: SignalDatabase?) : Dat
@JvmField
val CREATE_INDEXES: Array<String> = ChatFolderTable.CREATE_INDEX + ChatFolderMembershipTable.CREATE_INDEXES
fun insertInitialChatFoldersAtCreationTime(db: net.zetetic.database.sqlcipher.SQLiteDatabase) {
fun insertInitialChatFoldersAtCreationTime(db: SQLiteDatabase) {
db.insert(ChatFolderTable.TABLE_NAME, null, getAllChatsFolderContentValues())
}
@@ -50,7 +50,7 @@ class DistributionListTables constructor(context: Context?, databaseHelper: Sign
const val LIST_TABLE_NAME = ListTable.TABLE_NAME
const val PRIVACY_MODE = ListTable.PRIVACY_MODE
fun insertInitialDistributionListAtCreationTime(db: net.zetetic.database.sqlcipher.SQLiteDatabase) {
fun insertInitialDistributionListAtCreationTime(db: SQLiteDatabase) {
val recipientId = db.insert(
RecipientTable.TABLE_NAME,
null,
@@ -14,7 +14,6 @@ import androidx.sqlite.db.SupportSQLiteQuery;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteTransactionListener;
import org.signal.core.util.logging.Log;
import org.signal.core.util.tracing.Tracer;
import java.io.IOException;
@@ -354,7 +353,7 @@ public class SQLiteDatabase implements SupportSQLiteDatabase {
return traceSql("rawQuery(2a)", sql, false, () -> wrapped.rawQuery(sql, selectionArgs));
}
public Cursor rawQuery(String sql, Object[] args) {
public Cursor rawQuery(String sql, Object... args) {
DatabaseMonitor.onSql(sql, args);
return traceSql("rawQuery(2b)", sql, false,() -> wrapped.rawQuery(sql, args));
}
@@ -6,6 +6,7 @@ import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteException
import android.text.TextUtils
import androidx.sqlite.db.SupportSQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.intellij.lang.annotations.Language
import org.signal.core.util.SqlUtil
@@ -270,7 +271,7 @@ class SearchTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
* Drops all tables and recreates them.
*/
@JvmOverloads
fun fullyResetTables(db: SQLiteDatabase = writableDatabase.sqlCipherDatabase, useTransaction: Boolean = true) {
fun fullyResetTables(db: SupportSQLiteDatabase = writableDatabase.sqlCipherDatabase, useTransaction: Boolean = true) {
if (useTransaction) {
db.beginTransaction()
}
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.database
import android.app.Application
import android.content.Context
import androidx.annotation.VisibleForTesting
import androidx.sqlite.db.SupportSQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
@@ -22,6 +23,7 @@ import org.thoughtcrime.securesms.migrations.LegacyMigrationJob.DatabaseUpgradeL
import org.thoughtcrime.securesms.service.KeyCachingService
import org.thoughtcrime.securesms.util.TextSecurePreferences
import java.io.File
import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase
open class SignalDatabase(private val context: Application, databaseSecret: DatabaseSecret, attachmentSecret: AttachmentSecret, name: String = DATABASE_NAME) :
SQLiteOpenHelper(
@@ -84,6 +86,29 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
}
override fun onCreate(db: net.zetetic.database.sqlcipher.SQLiteDatabase) {
val signalDb = SignalSQLiteDatabase(db)
onCreateTablesIndexesAndTriggers(signalDb)
// Requires FTS5
executeStatements(signalDb, SearchTable.CREATE_TABLE)
executeStatements(signalDb, SearchTable.CREATE_TRIGGERS)
if (context.getDatabasePath(ClassicOpenHelper.NAME).exists()) {
val legacyHelper = ClassicOpenHelper(context)
val legacyDb = legacyHelper.writableDatabase
SQLCipherMigrationHelper.migratePlaintext(context, legacyDb, db)
val masterSecret = KeyCachingService.getMasterSecret(context)
if (masterSecret != null) SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret, legacyDb, db, null) else TextSecurePreferences.setNeedsSqlCipherMigration(context, true)
if (!PreKeyMigrationHelper.migratePreKeys(context, db)) {
PreKeysSyncJob.enqueue()
}
SessionStoreMigrationHelper.migrateSessions(context, db)
PreKeyMigrationHelper.cleanUpPreKeys(context)
}
}
@VisibleForTesting
fun onCreateTablesIndexesAndTriggers(db: SignalSQLiteDatabase) {
db.execSQL(MessageTable.CREATE_TABLE)
db.execSQL(AttachmentTable.CREATE_TABLE)
db.execSQL(ThreadTable.CREATE_TABLE)
@@ -117,7 +142,6 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
executeStatements(db, NameCollisionTables.CREATE_TABLE)
db.execSQL(InAppPaymentTable.CREATE_TABLE)
db.execSQL(InAppPaymentSubscriberTable.CREATE_TABLE)
executeStatements(db, SearchTable.CREATE_TABLE)
executeStatements(db, RemappedRecordTables.CREATE_TABLE)
executeStatements(db, MessageSendLogTables.CREATE_TABLE)
executeStatements(db, NotificationProfileTables.CREATE_TABLE)
@@ -148,24 +172,10 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
executeStatements(db, ChatFolderTables.CREATE_INDEXES)
executeStatements(db, NameCollisionTables.CREATE_INDEXES)
executeStatements(db, SearchTable.CREATE_TRIGGERS)
executeStatements(db, MessageSendLogTables.CREATE_TRIGGERS)
DistributionListTables.insertInitialDistributionListAtCreationTime(db)
ChatFolderTables.insertInitialChatFoldersAtCreationTime(db)
if (context.getDatabasePath(ClassicOpenHelper.NAME).exists()) {
val legacyHelper = ClassicOpenHelper(context)
val legacyDb = legacyHelper.writableDatabase
SQLCipherMigrationHelper.migratePlaintext(context, legacyDb, db)
val masterSecret = KeyCachingService.getMasterSecret(context)
if (masterSecret != null) SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret, legacyDb, db, null) else TextSecurePreferences.setNeedsSqlCipherMigration(context, true)
if (!PreKeyMigrationHelper.migratePreKeys(context, db)) {
PreKeysSyncJob.enqueue()
}
SessionStoreMigrationHelper.migrateSessions(context, db)
PreKeyMigrationHelper.cleanUpPreKeys(context)
}
}
override fun onUpgrade(db: net.zetetic.database.sqlcipher.SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@@ -178,7 +188,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
db.setForeignKeyConstraintsEnabled(false)
try {
// Transactions and version bumps are handled in the migrate method
SignalDatabaseMigrations.migrate(context, db, oldVersion, newVersion)
SignalDatabaseMigrations.migrate(context, SignalSQLiteDatabase(db), oldVersion, newVersion)
} finally {
db.setForeignKeyConstraintsEnabled(true)
@@ -202,11 +212,11 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
open val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
get() = super.writableDatabase
open val signalReadableDatabase: SQLiteDatabase
get() = SQLiteDatabase(super.readableDatabase)
open val signalReadableDatabase: SignalSQLiteDatabase
get() = SignalSQLiteDatabase(super.readableDatabase)
open val signalWritableDatabase: SQLiteDatabase
get() = SQLiteDatabase(super.writableDatabase)
open val signalWritableDatabase: SignalSQLiteDatabase
get() = SignalSQLiteDatabase(super.writableDatabase)
override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase {
return super.writableDatabase
@@ -216,7 +226,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
db.version = SignalDatabaseMigrations.DATABASE_VERSION
}
private fun executeStatements(db: net.zetetic.database.sqlcipher.SQLiteDatabase, statements: Array<String>) {
private fun executeStatements(db: SupportSQLiteDatabase, statements: Array<String>) {
for (statement in statements) db.execSQL(statement)
}
@@ -251,11 +261,11 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
get() = instance!!.rawWritableDatabase
@JvmStatic
val readableDatabase: SQLiteDatabase
val readableDatabase: SignalSQLiteDatabase
get() = instance!!.signalReadableDatabase
@JvmStatic
val writableDatabase: SQLiteDatabase
val writableDatabase: SignalSQLiteDatabase
get() = instance!!.signalWritableDatabase
@JvmStatic
@@ -361,7 +371,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
}
@JvmStatic
fun <T> runInTransaction(block: (SQLiteDatabase) -> T): T {
fun <T> runInTransaction(block: (SignalSQLiteDatabase) -> T): T {
return instance!!.signalWritableDatabase.withinTransaction {
block(it)
}
@@ -5,9 +5,8 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.SQLiteDatabase;
import org.thoughtcrime.securesms.util.DelimiterUtil;
import java.util.HashSet;
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers
import android.app.Application
import android.content.Context
import android.database.sqlite.SQLiteException
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.areForeignKeyConstraintsEnabled
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SignalDatabase
@@ -123,6 +122,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V264_FixGroupAddMem
import org.thoughtcrime.securesms.database.helpers.migration.V265_FixFtsTriggers
import org.thoughtcrime.securesms.database.helpers.migration.V266_UniqueThreadPinOrder
import org.thoughtcrime.securesms.database.helpers.migration.V267_FixGroupInvitationDeclinedUpdate
import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSqliteDatabase
/**
* Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness.
@@ -255,7 +255,7 @@ object SignalDatabaseMigrations {
const val DATABASE_VERSION = 267
@JvmStatic
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
fun migrate(context: Application, db: SignalSqliteDatabase, oldVersion: Int, newVersion: Int) {
val initialForeignKeyState = db.areForeignKeyConstraintsEnabled()
for (migrationData in migrations) {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Simple interface for allowing database migrations to live outside of [org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations].
@@ -14,7 +14,6 @@ import android.preference.PreferenceManager
import android.text.TextUtils
import androidx.core.content.contentValuesOf
import com.annimon.stream.Stream
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Base64
import org.signal.core.util.CursorUtil
import org.signal.core.util.Hex
@@ -29,6 +28,7 @@ import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper
import org.thoughtcrime.securesms.database.KeyValueDatabase
import org.thoughtcrime.securesms.database.RecipientTable
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.database.helpers.PreKeyMigrationHelper
import org.thoughtcrime.securesms.database.helpers.RecipientIdCleanupHelper
import org.thoughtcrime.securesms.database.helpers.RecipientIdMigrationHelper
@@ -222,14 +222,14 @@ object V149_LegacyMigrations : SignalDatabaseMigration {
db.execSQL("CREATE TABLE signed_prekeys (_id INTEGER PRIMARY KEY, key_id INTEGER UNIQUE, public_key TEXT NOT NULL, private_key TEXT NOT NULL, signature TEXT NOT NULL, timestamp INTEGER DEFAULT 0)")
db.execSQL("CREATE TABLE one_time_prekeys (_id INTEGER PRIMARY KEY, key_id INTEGER UNIQUE, public_key TEXT NOT NULL, private_key TEXT NOT NULL)")
if (!PreKeyMigrationHelper.migratePreKeys(context, db)) {
if (!PreKeyMigrationHelper.migratePreKeys(context, db.sqlCipherDatabase)) {
PreKeysSyncJob.enqueue()
}
}
if (oldVersion < MIGRATE_SESSIONS_VERSION) {
db.execSQL("CREATE TABLE sessions (_id INTEGER PRIMARY KEY, address TEXT NOT NULL, device INTEGER NOT NULL, record BLOB NOT NULL, UNIQUE(address, device) ON CONFLICT REPLACE)")
SessionStoreMigrationHelper.migrateSessions(context, db)
SessionStoreMigrationHelper.migrateSessions(context, db.sqlCipherDatabase)
}
if (oldVersion < NO_MORE_IMAGE_THUMBNAILS_VERSION) {
@@ -616,7 +616,7 @@ object V149_LegacyMigrations : SignalDatabaseMigration {
}
if (oldVersion < RECIPIENT_IDS) {
RecipientIdMigrationHelper.execute(db)
RecipientIdMigrationHelper.execute(db.sqlCipherDatabase)
}
if (oldVersion < RECIPIENT_SEARCH) {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adding an urgent flag to message envelopes to help with notifications. Need to track flag in
@@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import android.database.Cursor
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Base64
import org.signal.core.util.CursorUtil
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.storage.StorageSyncHelper
/**
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Marks story recipients with a new group type constant.
@@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import android.database.Cursor
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Base64
import org.signal.core.util.CursorUtil
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.storage.StorageSyncHelper
/**
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Introduces the tables and fields required to keep track of whether we need to send a PNI signature message and if the ones we've sent out have been received.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds necessary book-keeping columns to SMS and MMS tables for SMS export.
@@ -1,8 +1,8 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.update
import org.thoughtcrime.securesms.database.SQLiteDatabase
import java.util.concurrent.TimeUnit
/**
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
@Suppress("ClassName")
object V157_RecipeintHiddenMigration : SignalDatabaseMigration {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Track last time we did a forced sanity check for this group with the server.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
@Suppress("ClassName")
object V159_ThreadUnreadSelfMentionCount : SignalDatabaseMigration {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
@Suppress("ClassName")
object V160_SmsMmsExportedIndexMigration : SignalDatabaseMigration {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds an index to the story sends table to help with a new common query.
@@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import androidx.sqlite.db.SupportSQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations
/**
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import androidx.sqlite.db.SupportSQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Add columns needed to track remote megaphone specific snooze rates.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
@Suppress("ClassName")
object V164_ThreadDatabaseReadIndexMigration : SignalDatabaseMigration {
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds an index to MMS table that only covers id and messages with the type of payment notification to
@@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.delete
@@ -9,6 +8,7 @@ import org.signal.core.util.logging.Log
import org.signal.core.util.readToList
import org.signal.core.util.requireLong
import org.signal.core.util.update
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This one's a doozy. We want to add additional foreign key constraints between the thread, recipient, and message tables. This will let us know for sure
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Forgot to recreate the triggers for the reactions table in [V166_ThreadAndMessageForeignKeys]. So we gotta fix stuff up and do it here.
@@ -1,10 +1,10 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.keyvalue.SignalStore
@Suppress("ClassName")
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* We want to add a new `rank` column to the emoji_search table, and we no longer use it as an FTS
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
@Suppress("ClassName")
object V170_CallTableMigration : SignalDatabaseMigration {
@@ -1,13 +1,13 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
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.update
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* When we ran [V166_ThreadAndMessageForeignKeys], we forgot to update the actual table definition in [ThreadTable].
@@ -2,10 +2,10 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.readToList
import org.signal.core.util.requireNonNullString
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Migrates all IDs from the GroupTable into the GroupMembershipTable
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* In order to support scheduled sending, we need to add another column to keep track of when to send the message. We also use this
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a foreign key dependency between reactions and messages so we can remove the trigger.
@@ -1,8 +1,8 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Turns out renaming a table will automatically update all of your indexes, foreign keys, triggers, basically everything... except full-text search tables.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Expand quote index to included scheduled date so they can be excluded.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Removes the is_mms column from the MSL tables and fixes the triggers.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This adds a column to the Recipients table to store a spam reporting token.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This cleans up some MSL entries that we left behind during a bad past migration.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds support for storing the systemNickname from storage service.
@@ -1,9 +1,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* We saw evidence (via failed backup restores) that some people have recipients in their thread table that do not exist in the recipient table.
@@ -1,9 +1,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.MessageTable
import org.thoughtcrime.securesms.database.RecipientTable
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a new 'timestamp' column to CallTable and copies in the date_sent column data from
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds the CallLinkTable and modifies the CallTable to include an FK into it.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* [V183_CallLinkTableMigration] accidentally setup a unique constraint incorrectly and missed an index. This fixes it.
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import android.preference.PreferenceManager
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
@@ -14,6 +13,7 @@ import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString
import org.signal.core.util.requireString
import org.thoughtcrime.securesms.database.KeyValueDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.recipients.RecipientId
import org.whispersystems.signalservice.api.push.ServiceId.ACI
@@ -1,11 +1,11 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.signal.core.util.readToList
import org.signal.core.util.requireNonNullString
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* We added some foreign keys to the message table (particularly on original_message_id and latest_revision_id)
@@ -1,9 +1,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* I found some other tables that didn't have the proper indexes setup to correspond with their foreign keys.
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import android.preference.PreferenceManager
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
@@ -14,6 +13,7 @@ import org.signal.core.util.requireLong
import org.signal.core.util.requireNonNullString
import org.signal.core.util.requireString
import org.thoughtcrime.securesms.database.KeyValueDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.recipients.RecipientId
import org.whispersystems.signalservice.api.push.ServiceId.ACI
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Fleshes out the call link table and rebuilds the call event table.
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This migration used to do what [V191_UniqueMessageMigrationV2] does. However, due to bugs, the migration was abandoned.
@@ -1,13 +1,13 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.signal.core.util.readToList
import org.signal.core.util.readToSingleBoolean
import org.signal.core.util.requireLong
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* We want to have a unique constraint on message (author, timestamp, thread). Unfortunately, because we haven't had one for all this time, some dupes
@@ -6,9 +6,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Allow ROOT_KEY in CallLinkTable to be null.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Due to a bug, this has been replaced by [V196_BackCallLinksWithRecipientV2]
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Introduces [org.thoughtcrime.securesms.database.KyberPreKeyTable].
@@ -6,12 +6,12 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.signal.core.util.readToList
import org.signal.core.util.requireLong
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Back CallLinks with a Recipient to ease integration and ensure we can support
@@ -6,9 +6,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Cleans up the call events table and restricts peer to non-null.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Because getting the color is a simple modulo operation, there is no need to store it in the database.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* New field migration.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds the ACTIVE column to the THREAD table, and mark all current threads active.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This updates the PNI column to have the proper serialized format.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* This migration rebuilds the recipient table to drop some deprecated columns, rename others to match their intended name, and some new constraints.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Drop the unnecessary thread-date index.
@@ -7,7 +7,7 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import androidx.sqlite.db.SupportSQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Keep track of a "stale timestamp" for one-time prekeys so that we can know when it's safe to delete them.
@@ -6,10 +6,10 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Back CallLinks with a Recipient to ease integration and ensure we can support
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Drop the no longer used push table.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Add an index to speed up thread counts.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* New field migration.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* PNIs were incorrectly being set to ACI column, clear them if present.
@@ -6,11 +6,11 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.logging.Log
import org.signal.core.util.requireString
import org.thoughtcrime.securesms.database.KeyValueDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.whispersystems.signalservice.api.push.ServiceId
/**
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
*/
@@ -6,10 +6,10 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* The android app was the only one enforcing unique story names.
@@ -6,8 +6,8 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* There was a bug where adding a member to a group by username could put that username in the e164 column.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a phone_number_sharing column to the recipient table.
@@ -6,9 +6,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
object V215_RemoveAttachmentUniqueId : SignalDatabaseMigration {
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
object V216_PhoneNumberDiscoverable : SignalDatabaseMigration {
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a message_extras column to the messages table. This allows us to
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a pni_signature_verified column to the recipient table, letting us track whether the ACI/PNI association is verified and sync that to storage service.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Changes our PNI prekey stores to use a constant indicating it's for a PNI rather than the specific PNI.
@@ -6,9 +6,9 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.Stopwatch
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* A while back we added an accountId to the prekey tables to support a mix of ACI and PNI identities.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds read state to call events to separately track from the primary messages table.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds the new data hash columns and indexes.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds necessary fields to the recipeints table for the nickname & notes feature.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds archive_cdn and archive_media to attachment.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds local user joined state and group call active state to the
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds index to archive_media_id
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a new column to track the status of transferring attachments to the archive service.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds the tables for managing name collisions
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* In order to both correct how we display missed calls and not spam users,
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Adds a partial index for some performance-critical queries around unread counts.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
object V231_ArchiveThumbnailColumns : SignalDatabaseMigration {
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Create the table and migrate necessary data.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Updates notified default value from 0 to 1
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Add a separate column to track thumbnail restore state
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Add a column for attachment uuids
@@ -7,9 +7,9 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import androidx.core.content.contentValuesOf
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.logging.Log
import org.signal.core.util.update
import org.thoughtcrime.securesms.database.SQLiteDatabase
import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData
/**
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Reset last forced update timestamp for groups to fix a local group state bug.
@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.thoughtcrime.securesms.database.SQLiteDatabase
/**
* Add columns to group and group membership tables needed for group send endorsements.
Loaded 100 of 138 files, more files were not shown because too many files have changed in this diff. Show more