From ceeed33c983d8b2c51c528403e191afa56fe2540 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 24 May 2022 18:56:26 +0200 Subject: [PATCH] Deduplicate unique accounts and limit account array in descendants CTE Limit unique accounts to check blocks from to 30 unique accounts (any new participant will have its blocks ignored for the purpose of displaying the posts). This is extremely unlikely to be reached in a legitimate situation, but would limit wasteful computation in specially-crafted threads with many participants. --- app/models/concerns/status/threading_concern.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/status/threading_concern.rb b/app/models/concerns/status/threading_concern.rb index 937090ead1..faa3a37700 100644 --- a/app/models/concerns/status/threading_concern.rb +++ b/app/models/concerns/status/threading_concern.rb @@ -84,7 +84,11 @@ module Status::ThreadingConcern UNION ALL SELECT - statuses.id, path || statuses.id, authors || statuses.account_id + statuses.id, path || statuses.id, (CASE + WHEN array_length(authors, 1) >= 30 THEN authors + WHEN statuses.account_id = ANY(authors) THEN authors + ELSE authors || statuses.account_id + END) FROM search_tree JOIN