diff --git a/keyserver/src/deleters/thread-deleters.js b/keyserver/src/deleters/thread-deleters.js --- a/keyserver/src/deleters/thread-deleters.js +++ b/keyserver/src/deleters/thread-deleters.js @@ -61,27 +61,36 @@ ), ]); - const query = SQL` - DELETE t, ic, d, id, e, ie, re, ire, mm, r, ir, ms, im, up, iu, f, n, ino - FROM threads t - LEFT JOIN ids ic ON ic.id = t.id - LEFT JOIN days d ON d.thread = t.id - LEFT JOIN ids id ON id.id = d.id - LEFT JOIN entries e ON e.day = d.id - LEFT JOIN ids ie ON ie.id = e.id - LEFT JOIN revisions re ON re.entry = e.id - LEFT JOIN ids ire ON ire.id = re.id - LEFT JOIN memberships mm ON mm.thread = t.id - LEFT JOIN roles r ON r.thread = t.id - LEFT JOIN ids ir ON ir.id = r.id - LEFT JOIN messages ms ON ms.thread = t.id - LEFT JOIN ids im ON im.id = ms.id - LEFT JOIN uploads up ON (up.container = ms.id OR up.container = t.id) - LEFT JOIN ids iu ON iu.id = up.id - LEFT JOIN focused f ON f.thread = t.id - LEFT JOIN notifications n ON n.thread = t.id - LEFT JOIN ids ino ON ino.id = n.id - WHERE t.id IN (${threadIDs}) + const deletionQuery = SQL` + START TRANSACTION; + DELETE FROM threads WHERE id IN (${threadIDs}); + DELETE FROM ids WHERE id IN (${threadIDs}); + DELETE d, id, e, ie, r, ir + FROM days d + LEFT JOIN ids id ON id.id = d.id + LEFT JOIN entries e ON e.day = d.id + LEFT JOIN ids ie ON ie.id = e.id + LEFT JOIN revisions r ON r.entry = e.id + LEFT JOIN ids ir ON ir.id = r.id + WHERE d.thread IN (${threadIDs}); + DELETE FROM memberships WHERE thread IN (${threadIDs}); + DELETE r, i + FROM roles r + LEFT JOIN ids i ON i.id = r.id + WHERE r.thread IN (${threadIDs}); + DELETE m, im, u, iu + FROM messages m + LEFT JOIN ids im ON im.id = m.id + LEFT JOIN uploads u ON u.container = m.id + LEFT JOIN ids iu ON iu.id = u.id + WHERE m.thread IN (${threadIDs}); + DELETE FROM uploads WHERE container IN (${threadIDs}); + DELETE FROM focused WHERE thread IN (${threadIDs}); + DELETE n, i + FROM notifications n + LEFT JOIN ids i ON i.id = n.id + WHERE n.thread IN (${threadIDs}); + COMMIT; `; const time = Date.now(); @@ -99,7 +108,7 @@ const [{ viewerUpdates }] = await Promise.all([ createUpdates(updateDatas, { viewer, updatesForCurrentSession: 'return' }), - dbQuery(query), + dbQuery(deletionQuery, { multipleStatements: true }), ]); return { updatesResult: { newUpdates: viewerUpdates } };