Improve backup export speed

Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
This commit is contained in:
automated-signal
2026-03-11 19:59:57 -05:00
committed by GitHub
parent e53d115a4f
commit a27a0a6a9e
6 changed files with 77 additions and 16 deletions

View File

@@ -153,6 +153,8 @@ import type {
MessageType,
PageMessagesCursorType,
PageMessagesResultType,
PageBackupMessagesCursorType,
PageBackupMessagesResultType,
PreKeyIdType,
PollVoteReadResultType,
ReactionResultType,
@@ -573,6 +575,7 @@ export const DataReader: ServerReadableInterface = {
finishGetKnownMessageAttachments,
pageMessages,
finishPageMessages,
pageBackupMessages,
getKnownDownloads,
getKnownConversationAttachments,
@@ -8958,6 +8961,32 @@ function finishPageMessages(
`);
}
function pageBackupMessages(
db: ReadableDB,
cursor?: PageBackupMessagesCursorType
): PageBackupMessagesResultType {
const LIMIT = 10000;
const [query, params] = sql`
SELECT
rowid,
${MESSAGE_COLUMNS_FRAGMENT}
FROM messages
WHERE
rowid >= ${cursor?.nextRowid ?? 0}
LIMIT ${LIMIT}
`;
const rows: Array<MessageTypeUnhydrated & { rowid: number }> = db
.prepare(query)
.all(params);
return {
cursor: {
nextRowid: rows.at(-1)?.rowid ?? 0,
done: rows.length < LIMIT,
} as PageBackupMessagesCursorType,
messages: hydrateMessages(db, rows),
};
}
function getKnownDownloads(db: ReadableDB): Array<string> {
const result = [];