112 lines
3.5 KiB
TypeScript
112 lines
3.5 KiB
TypeScript
![]() |
// 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!');
|
||
|
}
|