signal-desktop/ts/sql/migrations/1420-backup-downloads.ts

71 lines
2.1 KiB
TypeScript
Raw Normal View History

// 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!');
}