From 6637fc2b9583f4e5bcb0d57c6990aab5aae93ab3 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 2 Aug 2021 14:55:31 -0700 Subject: [PATCH] Migrate sourceDevice from TEXT to INTEGER --- ts/model-types.d.ts | 2 +- ts/sql/Client.ts | 2 +- ts/sql/Interface.ts | 6 +++--- ts/sql/Server.ts | 39 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/ts/model-types.d.ts b/ts/model-types.d.ts index 118ba75d64..29904ab511 100644 --- a/ts/model-types.d.ts +++ b/ts/model-types.d.ts @@ -119,7 +119,7 @@ export type MessageAttributesType = { }>; requiredProtocolVersion?: number; retryOptions?: RetryOptions; - sourceDevice?: string | number; + sourceDevice?: number; supportedVersionAtReceive?: unknown; synced?: boolean; unidentifiedDeliveryReceived?: boolean; diff --git a/ts/sql/Client.ts b/ts/sql/Client.ts index 7de4082890..9a5074305d 100644 --- a/ts/sql/Client.ts +++ b/ts/sql/Client.ts @@ -1149,7 +1149,7 @@ async function getMessageBySender( }: { source: string; sourceUuid: string; - sourceDevice: string; + sourceDevice: number; sent_at: number; }, { Message }: { Message: typeof MessageModel } diff --git a/ts/sql/Interface.ts b/ts/sql/Interface.ts index fa7190266a..b08618dff3 100644 --- a/ts/sql/Interface.ts +++ b/ts/sql/Interface.ts @@ -195,7 +195,7 @@ export type UnprocessedType = { export type UnprocessedUpdateType = { source?: string; sourceUuid?: string; - sourceDevice?: string; + sourceDevice?: number; serverGuid?: string; serverTimestamp?: number; decrypted?: string; @@ -459,7 +459,7 @@ export type ServerInterface = DataInterface & { getMessageBySender: (options: { source: string; sourceUuid: string; - sourceDevice: string; + sourceDevice: number; sent_at: number; }) => Promise>; getMessagesBySentAt: (sentAt: number) => Promise>; @@ -548,7 +548,7 @@ export type ClientInterface = DataInterface & { data: { source: string; sourceUuid: string; - sourceDevice: string; + sourceDevice: number; sent_at: number; }, options: { Message: typeof MessageModel } diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index 926a97ef2e..d1b395ba49 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -2040,6 +2040,42 @@ function updateToSchemaVersion37(currentVersion: number, db: Database) { console.log('updateToSchemaVersion37: success!'); } +function updateToSchemaVersion38(currentVersion: number, db: Database) { + if (currentVersion >= 38) { + return; + } + + db.transaction(() => { + // TODO: Remove deprecated columns once sqlcipher is updated to support it + db.exec(` + DROP INDEX IF EXISTS messages_duplicate_check; + + ALTER TABLE messages + RENAME COLUMN sourceDevice TO deprecatedSourceDevice; + ALTER TABLE messages + ADD COLUMN sourceDevice INTEGER; + + UPDATE messages + SET + sourceDevice = CAST(deprecatedSourceDevice AS INTEGER), + deprecatedSourceDevice = NULL; + + ALTER TABLE unprocessed + RENAME COLUMN sourceDevice TO deprecatedSourceDevice; + ALTER TABLE unprocessed + ADD COLUMN sourceDevice INTEGER; + + UPDATE unprocessed + SET + sourceDevice = CAST(deprecatedSourceDevice AS INTEGER), + deprecatedSourceDevice = NULL; + `); + + db.pragma('user_version = 38'); + })(); + console.log('updateToSchemaVersion38: success!'); +} + const SCHEMA_VERSIONS = [ updateToSchemaVersion1, updateToSchemaVersion2, @@ -2078,6 +2114,7 @@ const SCHEMA_VERSIONS = [ updateToSchemaVersion35, updateToSchemaVersion36, updateToSchemaVersion37, + updateToSchemaVersion38, ]; function updateSchema(db: Database): void { @@ -3744,7 +3781,7 @@ async function getMessageBySender({ }: { source: string; sourceUuid: string; - sourceDevice: string; + sourceDevice: number; sent_at: number; }): Promise> { const db = getInstance();