CallLinkTable migration to add necessary columns for integration.
This commit is contained in:
parent
9eadd92d05
commit
a1eb33b1f6
5 changed files with 108 additions and 5 deletions
|
@ -114,7 +114,7 @@ class DatabaseConsistencyTest {
|
||||||
.replace(Regex("\\s+"), " ")
|
.replace(Regex("\\s+"), " ")
|
||||||
.replace(Regex.fromLiteral("( "), "(")
|
.replace(Regex.fromLiteral("( "), "(")
|
||||||
.replace(Regex.fromLiteral(" )"), ")")
|
.replace(Regex.fromLiteral(" )"), ")")
|
||||||
.replace(Regex("CREATE TABLE \"([a-z]+)\""), "CREATE TABLE $1") // for some reason SQLite will wrap table names in quotes for upgraded tables. This unwraps them.
|
.replace(Regex("CREATE TABLE \"([a-zA-Z_]+)\""), "CREATE TABLE $1") // for some reason SQLite will wrap table names in quotes for upgraded tables. This unwraps them.
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InMemoryTestHelper(private val application: Application) : SQLiteOpenHelper(application, null, null, 1) {
|
private class InMemoryTestHelper(private val application: Application) : SQLiteOpenHelper(application, null, null, 1) {
|
||||||
|
|
|
@ -14,11 +14,27 @@ class CallLinkTable(context: Context, databaseHelper: SignalDatabase) : Database
|
||||||
|
|
||||||
const val TABLE_NAME = "call_link"
|
const val TABLE_NAME = "call_link"
|
||||||
const val ID = "_id"
|
const val ID = "_id"
|
||||||
|
const val ROOT_KEY = "root_key"
|
||||||
|
const val ROOM_ID = "room_id"
|
||||||
|
const val ADMIN_KEY = "admin_key"
|
||||||
|
const val NAME = "name"
|
||||||
|
const val RESTRICTIONS = "restrictions"
|
||||||
|
const val REVOKED = "revoked"
|
||||||
|
const val EXPIRATION = "expiration"
|
||||||
|
const val AVATAR_COLOR = "avatar_color"
|
||||||
|
|
||||||
//language=sql
|
//language=sql
|
||||||
val CREATE_TABLE = """
|
const val CREATE_TABLE = """
|
||||||
CREATE TABLE $TABLE_NAME (
|
CREATE TABLE $TABLE_NAME (
|
||||||
$ID INTEGER PRIMARY KEY
|
$ID INTEGER PRIMARY KEY,
|
||||||
|
$ROOT_KEY BLOB NOT NULL,
|
||||||
|
$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
|
||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl
|
||||||
$CALL_ID INTEGER NOT NULL,
|
$CALL_ID INTEGER NOT NULL,
|
||||||
$MESSAGE_ID INTEGER DEFAULT NULL REFERENCES ${MessageTable.TABLE_NAME} (${MessageTable.ID}) ON DELETE SET NULL,
|
$MESSAGE_ID INTEGER DEFAULT NULL REFERENCES ${MessageTable.TABLE_NAME} (${MessageTable.ID}) ON DELETE SET NULL,
|
||||||
$PEER INTEGER DEFAULT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}) ON DELETE CASCADE,
|
$PEER INTEGER DEFAULT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}) ON DELETE CASCADE,
|
||||||
$CALL_LINK INTEGER DEFAULT NULL REFERENCES ${CallLinkTable.TABLE_NAME} (${CallLinkTable.ID}) ON DELETE CASCADE,
|
$CALL_LINK TEXT DEFAULT NULL REFERENCES ${CallLinkTable.TABLE_NAME} (${CallLinkTable.ROOM_ID}) ON DELETE CASCADE,
|
||||||
$TYPE INTEGER NOT NULL,
|
$TYPE INTEGER NOT NULL,
|
||||||
$DIRECTION INTEGER NOT NULL,
|
$DIRECTION INTEGER NOT NULL,
|
||||||
$EVENT INTEGER NOT NULL,
|
$EVENT INTEGER NOT NULL,
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V185_MessageRecipie
|
||||||
import org.thoughtcrime.securesms.database.helpers.migration.V186_ForeignKeyIndicesMigration
|
import org.thoughtcrime.securesms.database.helpers.migration.V186_ForeignKeyIndicesMigration
|
||||||
import org.thoughtcrime.securesms.database.helpers.migration.V187_MoreForeignKeyIndexesMigration
|
import org.thoughtcrime.securesms.database.helpers.migration.V187_MoreForeignKeyIndexesMigration
|
||||||
import org.thoughtcrime.securesms.database.helpers.migration.V188_FixMessageRecipientsAndEditMessageMigration
|
import org.thoughtcrime.securesms.database.helpers.migration.V188_FixMessageRecipientsAndEditMessageMigration
|
||||||
|
import org.thoughtcrime.securesms.database.helpers.migration.V189_CreateCallLinkTableColumnsAndRebuildFKReference
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness.
|
* Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness.
|
||||||
|
@ -52,7 +53,7 @@ object SignalDatabaseMigrations {
|
||||||
|
|
||||||
val TAG: String = Log.tag(SignalDatabaseMigrations.javaClass)
|
val TAG: String = Log.tag(SignalDatabaseMigrations.javaClass)
|
||||||
|
|
||||||
const val DATABASE_VERSION = 188
|
const val DATABASE_VERSION = 189
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
||||||
|
@ -215,6 +216,10 @@ object SignalDatabaseMigrations {
|
||||||
if (oldVersion < 188) {
|
if (oldVersion < 188) {
|
||||||
V188_FixMessageRecipientsAndEditMessageMigration.migrate(context, db, oldVersion, newVersion)
|
V188_FixMessageRecipientsAndEditMessageMigration.migrate(context, db, oldVersion, newVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldVersion < 189) {
|
||||||
|
V189_CreateCallLinkTableColumnsAndRebuildFKReference.migrate(context, db, oldVersion, newVersion)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fleshes out the call link table and rebuilds the call event table.
|
||||||
|
* At this point, there should be no records in the call link database.
|
||||||
|
*/
|
||||||
|
object V189_CreateCallLinkTableColumnsAndRebuildFKReference : SignalDatabaseMigration {
|
||||||
|
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
||||||
|
db.execSQL(
|
||||||
|
"""
|
||||||
|
CREATE TABLE call_link_tmp (
|
||||||
|
_id INTEGER PRIMARY KEY,
|
||||||
|
root_key BLOB NOT NULL,
|
||||||
|
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()
|
||||||
|
)
|
||||||
|
|
||||||
|
db.execSQL(
|
||||||
|
"""
|
||||||
|
CREATE TABLE call_tmp (
|
||||||
|
_id INTEGER PRIMARY KEY,
|
||||||
|
call_id INTEGER NOT NULL,
|
||||||
|
message_id INTEGER DEFAULT NULL REFERENCES message (_id) ON DELETE SET NULL,
|
||||||
|
peer INTEGER DEFAULT NULL REFERENCES recipient (_id) ON DELETE CASCADE,
|
||||||
|
call_link TEXT DEFAULT NULL REFERENCES call_link (room_id) ON DELETE CASCADE,
|
||||||
|
type INTEGER NOT NULL,
|
||||||
|
direction INTEGER NOT NULL,
|
||||||
|
event INTEGER NOT NULL,
|
||||||
|
timestamp INTEGER NOT NULL,
|
||||||
|
ringer INTEGER DEFAULT NULL,
|
||||||
|
deletion_timestamp INTEGER DEFAULT 0,
|
||||||
|
UNIQUE (call_id, peer, call_link) ON CONFLICT FAIL,
|
||||||
|
CHECK ((peer IS NULL AND call_link IS NOT NULL) OR (peer IS NOT NULL AND call_link IS NULL))
|
||||||
|
)
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
|
||||||
|
db.execSQL(
|
||||||
|
"""
|
||||||
|
INSERT INTO call_tmp
|
||||||
|
SELECT
|
||||||
|
_id,
|
||||||
|
call_id,
|
||||||
|
message_id,
|
||||||
|
peer,
|
||||||
|
NULL as call_link,
|
||||||
|
type,
|
||||||
|
direction,
|
||||||
|
event,
|
||||||
|
timestamp,
|
||||||
|
ringer,
|
||||||
|
deletion_timestamp
|
||||||
|
FROM call
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
|
||||||
|
db.execSQL("DROP TABLE call")
|
||||||
|
db.execSQL("ALTER TABLE call_tmp RENAME TO call")
|
||||||
|
db.execSQL("DROP TABLE call_link")
|
||||||
|
db.execSQL("ALTER TABLE call_link_tmp RENAME TO call_link")
|
||||||
|
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS call_call_id_index ON call (call_id)")
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS call_message_id_index ON call (message_id)")
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS call_call_link_index ON call (call_link)")
|
||||||
|
db.execSQL("CREATE INDEX IF NOT EXISTS call_peer_index ON call (peer)")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue