Update nullability of CallLinkTable column.

This commit is contained in:
Alex Hart
2023-05-15 13:29:00 -03:00
committed by Greyson Parrelli
parent 93efc21452
commit 5c78de2f46
9 changed files with 79 additions and 30 deletions

View File

@@ -27,7 +27,7 @@ class CallLinkTable(context: Context, databaseHelper: SignalDatabase) : Database
const val CREATE_TABLE = """
CREATE TABLE $TABLE_NAME (
$ID INTEGER PRIMARY KEY,
$ROOT_KEY BLOB NOT NULL,
$ROOT_KEY BLOB,
$ROOM_ID TEXT NOT NULL UNIQUE,
$ADMIN_KEY BLOB,
$NAME TEXT NOT NULL,

View File

@@ -47,6 +47,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V188_FixMessageReci
import org.thoughtcrime.securesms.database.helpers.migration.V189_CreateCallLinkTableColumnsAndRebuildFKReference
import org.thoughtcrime.securesms.database.helpers.migration.V190_UniqueMessageMigration
import org.thoughtcrime.securesms.database.helpers.migration.V191_UniqueMessageMigrationV2
import org.thoughtcrime.securesms.database.helpers.migration.V192_CallLinkTableNullableRootKeys
/**
* Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness.
@@ -55,7 +56,7 @@ object SignalDatabaseMigrations {
val TAG: String = Log.tag(SignalDatabaseMigrations.javaClass)
const val DATABASE_VERSION = 191
const val DATABASE_VERSION = 192
@JvmStatic
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@@ -230,6 +231,10 @@ object SignalDatabaseMigrations {
if (oldVersion < 191) {
V191_UniqueMessageMigrationV2.migrate(context, db, oldVersion, newVersion)
}
if (oldVersion < 192) {
V192_CallLinkTableNullableRootKeys.migrate(context, db, oldVersion, newVersion)
}
}
@JvmStatic

View File

@@ -0,0 +1,44 @@
/*
* Copyright 2023 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
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
/**
* Allow ROOT_KEY in CallLinkTable to be null.
*/
object V192_CallLinkTableNullableRootKeys : SignalDatabaseMigration {
private val TAG = Log.tag(V192_CallLinkTableNullableRootKeys::class.java)
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("DROP TABLE call_link")
db.execSQL(
"""
CREATE TABLE call_link (
_id INTEGER PRIMARY KEY,
root_key BLOB,
room_id TEXT NOT NULL UNIQUE,
admin_key BLOB,
name TEXT NOT NULL,
restrictions INTEGER NOT NULL,
revoked INTEGER NOT NULL,
expiration INTEGER NOT NULL,
avatar_color TEXT NOT NULL
)
""".trimIndent()
)
val foreignKeyViolations: List<SqlUtil.ForeignKeyViolation> = SqlUtil.getForeignKeyViolations(db, "call")
if (foreignKeyViolations.isNotEmpty()) {
Log.w(TAG, "Foreign key violations!\n${foreignKeyViolations.joinToString(separator = "\n")}")
throw IllegalStateException("Foreign key violations!")
}
}
}