From f853a42756336615c47e5954b19e201ab8eaeffb Mon Sep 17 00:00:00 2001 From: Jamie Kyle <113370520+jamiebuilds-signal@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:45:07 -0700 Subject: [PATCH] Optimize markAllCallHistoryReadWithPredicate --- ts/sql/Server.ts | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index c2e341939d..5731eb01b5 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -3851,28 +3851,22 @@ async function markAllCallHistoryReadWithPredicate( ? sqlFragment`callsHistory.peerId IS ${target.peerId}` : sqlFragment`TRUE`; - const [selectQuery, selectParams] = sql` - SELECT callsHistory.callId - FROM callsHistory - WHERE ${predicate} - AND callsHistory.timestamp <= ${timestamp} + const [updateQuery, updateParams] = sql` + UPDATE messages + SET + seenStatus = ${SEEN_STATUS_SEEN}, + json = json_patch(json, ${jsonPatch}) + WHERE id IN ( + SELECT id FROM messages + INNER JOIN callsHistory ON callsHistory.callId IS messages.callId + WHERE messages.type IS 'call-history' + AND messages.seenStatus IS ${SEEN_STATUS_UNSEEN} + AND callsHistory.timestamp <= ${timestamp} + AND ${predicate} + ) `; - const callIds = db.prepare(selectQuery).pluck().all(selectParams); - - batchMultiVarQuery(db, callIds, ids => { - const idList = sqlJoin(ids.map(id => sqlFragment`${id}`)); - - const [updateQuery, updateParams] = sql` - UPDATE messages - SET - seenStatus = ${SEEN_STATUS_SEEN}, - json = json_patch(json, ${jsonPatch}) - WHERE callId IN (${idList}); - `; - - db.prepare(updateQuery).run(updateParams); - }); + db.prepare(updateQuery).run(updateParams); })(); }