mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-21 17:08:11 +01:00
Normalize message attachments
This commit is contained in:
111
ts/sql/migrations/1360-attachments.ts
Normal file
111
ts/sql/migrations/1360-attachments.ts
Normal file
@@ -0,0 +1,111 @@
|
||||
// Copyright 2024 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import type { LoggerType } from '../../types/Logging';
|
||||
import type { WritableDB } from '../Interface';
|
||||
|
||||
export const version = 1360;
|
||||
|
||||
export function updateToSchemaVersion1360(
|
||||
currentVersion: number,
|
||||
db: WritableDB,
|
||||
logger: LoggerType
|
||||
): void {
|
||||
if (currentVersion >= 1360) {
|
||||
return;
|
||||
}
|
||||
|
||||
db.transaction(() => {
|
||||
db.exec(`
|
||||
DROP TABLE IF EXISTS message_attachments;
|
||||
`);
|
||||
|
||||
db.exec(`
|
||||
CREATE TABLE message_attachments (
|
||||
messageId TEXT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
||||
-- For editHistoryIndex to be part of the primary key, it cannot be NULL in strict tables.
|
||||
-- For that reason, we use a value of -1 to indicate that it is the root message (not in editHistory)
|
||||
editHistoryIndex INTEGER NOT NULL,
|
||||
attachmentType TEXT NOT NULL, -- 'long-message' | 'quote' | 'attachment' | 'preview' | 'contact' | 'sticker'
|
||||
orderInMessage INTEGER NOT NULL,
|
||||
conversationId TEXT NOT NULL,
|
||||
sentAt INTEGER NOT NULL,
|
||||
clientUuid TEXT,
|
||||
size INTEGER NOT NULL,
|
||||
contentType TEXT NOT NULL,
|
||||
path TEXT,
|
||||
plaintextHash TEXT,
|
||||
localKey TEXT,
|
||||
caption TEXT,
|
||||
fileName TEXT,
|
||||
blurHash TEXT,
|
||||
height INTEGER,
|
||||
width INTEGER,
|
||||
digest TEXT,
|
||||
key TEXT,
|
||||
iv TEXT,
|
||||
downloadPath TEXT,
|
||||
version INTEGER,
|
||||
incrementalMac TEXT,
|
||||
incrementalMacChunkSize INTEGER,
|
||||
transitCdnKey TEXT,
|
||||
transitCdnNumber INTEGER,
|
||||
transitCdnUploadTimestamp INTEGER,
|
||||
backupMediaName TEXT,
|
||||
backupCdnNumber INTEGER,
|
||||
isReencryptableToSameDigest INTEGER,
|
||||
reencryptionIv TEXT,
|
||||
reencryptionKey TEXT,
|
||||
reencryptionDigest TEXT,
|
||||
thumbnailPath TEXT,
|
||||
thumbnailSize INTEGER,
|
||||
thumbnailContentType TEXT,
|
||||
thumbnailLocalKey TEXT,
|
||||
thumbnailVersion INTEGER,
|
||||
screenshotPath TEXT,
|
||||
screenshotSize INTEGER,
|
||||
screenshotContentType TEXT,
|
||||
screenshotLocalKey TEXT,
|
||||
screenshotVersion INTEGER,
|
||||
backupThumbnailPath TEXT,
|
||||
backupThumbnailSize INTEGER,
|
||||
backupThumbnailContentType TEXT,
|
||||
backupThumbnailLocalKey TEXT,
|
||||
backupThumbnailVersion INTEGER,
|
||||
storyTextAttachmentJson TEXT,
|
||||
localBackupPath TEXT,
|
||||
flags INTEGER,
|
||||
error INTEGER,
|
||||
wasTooBig INTEGER,
|
||||
isCorrupted INTEGER,
|
||||
copiedFromQuotedAttachment INTEGER,
|
||||
pending INTEGER,
|
||||
backfillError INTEGER,
|
||||
PRIMARY KEY (messageId, editHistoryIndex, attachmentType, orderInMessage)
|
||||
) STRICT;
|
||||
`);
|
||||
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_messageId ON message_attachments (messageId);'
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_plaintextHash ON message_attachments (plaintextHash);'
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_path ON message_attachments (path);'
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_all_thumbnailPath ON message_attachments (thumbnailPath);'
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_all_screenshotPath ON message_attachments (screenshotPath);'
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX message_attachments_all_backupThumbnailPath ON message_attachments (backupThumbnailPath);'
|
||||
);
|
||||
|
||||
db.pragma('user_version = 1360');
|
||||
})();
|
||||
|
||||
logger.info('updateToSchemaVersion1360: success!');
|
||||
}
|
||||
Reference in New Issue
Block a user