71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
![]() |
// Copyright 2025 Signal Messenger, LLC
|
||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
import type { LoggerType } from '../../types/Logging';
|
||
|
import { AttachmentDownloadSource, type WritableDB } from '../Interface';
|
||
|
|
||
|
export const version = 1420;
|
||
|
|
||
|
export function updateToSchemaVersion1420(
|
||
|
currentVersion: number,
|
||
|
db: WritableDB,
|
||
|
logger: LoggerType
|
||
|
): void {
|
||
|
if (currentVersion >= 1420) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
db.transaction(() => {
|
||
|
db.exec(`
|
||
|
ALTER TABLE attachment_downloads
|
||
|
ADD COLUMN originalSource TEXT NOT NULL DEFAULT ${AttachmentDownloadSource.STANDARD};
|
||
|
|
||
|
UPDATE attachment_downloads
|
||
|
SET originalSource = source;
|
||
|
`);
|
||
|
|
||
|
db.exec(`
|
||
|
CREATE TABLE attachment_downloads_backup_stats (
|
||
|
id INTEGER PRIMARY KEY CHECK (id = 0),
|
||
|
totalBytes INTEGER NOT NULL,
|
||
|
completedBytes INTEGER NOT NULL
|
||
|
) STRICT;
|
||
|
|
||
|
INSERT INTO attachment_downloads_backup_stats
|
||
|
(id, totalBytes, completedBytes)
|
||
|
VALUES
|
||
|
(0, 0, 0);
|
||
|
|
||
|
CREATE TRIGGER attachment_downloads_backup_job_insert
|
||
|
AFTER INSERT ON attachment_downloads
|
||
|
WHEN NEW.originalSource = 'backup_import'
|
||
|
BEGIN
|
||
|
UPDATE attachment_downloads_backup_stats SET
|
||
|
totalBytes = totalBytes + NEW.ciphertextSize;
|
||
|
END;
|
||
|
|
||
|
CREATE TRIGGER attachment_downloads_backup_job_update
|
||
|
AFTER UPDATE OF ciphertextSize ON attachment_downloads
|
||
|
WHEN NEW.originalSource = 'backup_import'
|
||
|
BEGIN
|
||
|
UPDATE attachment_downloads_backup_stats SET
|
||
|
totalBytes = MAX(0, totalBytes - OLD.ciphertextSize + NEW.ciphertextSize)
|
||
|
WHERE id = 0;
|
||
|
END;
|
||
|
|
||
|
CREATE TRIGGER attachment_downloads_backup_job_delete
|
||
|
AFTER DELETE ON attachment_downloads
|
||
|
WHEN OLD.originalSource = 'backup_import'
|
||
|
BEGIN
|
||
|
UPDATE attachment_downloads_backup_stats SET
|
||
|
completedBytes = completedBytes + OLD.ciphertextSize
|
||
|
WHERE id = 0;
|
||
|
END;
|
||
|
`);
|
||
|
|
||
|
db.pragma('user_version = 1420');
|
||
|
})();
|
||
|
|
||
|
logger.info('updateToSchemaVersion1420: success!');
|
||
|
}
|