29 lines
894 B
SQL
29 lines
894 B
SQL
-- Canonicalize RFC Message-IDs so threading lookups (angle-bracket form) match stored values.
|
|
UPDATE messages
|
|
SET message_id = '<' || trim(both '<>' from trim(message_id)) || '>',
|
|
updated_at = NOW()
|
|
WHERE message_id <> ''
|
|
AND message_id NOT LIKE '<%>';
|
|
|
|
-- Re-link split threads from in_reply_to / references (repeat for nested replies).
|
|
DO $$
|
|
DECLARE
|
|
i INT;
|
|
n BIGINT;
|
|
BEGIN
|
|
FOR i IN 1..8 LOOP
|
|
UPDATE messages child
|
|
SET thread_id = parent.thread_id, updated_at = NOW()
|
|
FROM messages parent
|
|
WHERE child.account_id = parent.account_id
|
|
AND parent.thread_id IS NOT NULL
|
|
AND child.thread_id IS DISTINCT FROM parent.thread_id
|
|
AND (
|
|
(child.in_reply_to <> '' AND child.in_reply_to = parent.message_id)
|
|
OR parent.message_id = ANY(child.references_header)
|
|
);
|
|
GET DIAGNOSTICS n = ROW_COUNT;
|
|
EXIT WHEN n = 0;
|
|
END LOOP;
|
|
END $$;
|