diff --git a/ts/model-types.d.ts b/ts/model-types.d.ts index 118ba75d6..29904ab51 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 7de408289..9a5074305 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 fa7190266..b08618dff 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 926a97ef2..d1b395ba4 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();