summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2022-02-03 14:07:43 +0100
committerGitHub <noreply@github.com>2022-02-03 14:07:43 +0100
commit948235592aa31c63033f7dc2d20a82115ca50149 (patch)
tree8086352ebc0b475a54a4ed68c3e2282ae8240d1f /app
parentd1ecc323e7d435d0ffb11056a53b52d3345868f0 (diff)
Fix response_to_recipient? CTE (#17427)
Diffstat (limited to 'app')
-rw-r--r--app/services/notify_service.rb14
1 files changed, 9 insertions, 5 deletions
diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb
index 09e28b76b02..0f3516d28f8 100644
--- a/app/services/notify_service.rb
+++ b/app/services/notify_service.rb
@@ -73,9 +73,11 @@ class NotifyService < BaseService
# Using an SQL CTE to avoid unneeded back-and-forth with SQL server in case of long threads
!Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @notification.from_account.id]).zero?
- WITH RECURSIVE ancestors(id, in_reply_to_id, replying_to_sender) AS (
+ WITH RECURSIVE ancestors(id, in_reply_to_id, replying_to_sender, path) AS (
SELECT
- s.id, s.in_reply_to_id, (CASE
+ s.id,
+ s.in_reply_to_id,
+ (CASE
WHEN s.account_id = :recipient_id THEN
EXISTS (
SELECT *
@@ -84,7 +86,8 @@ class NotifyService < BaseService
)
ELSE
FALSE
- END)
+ END),
+ ARRAY[s.id]
FROM statuses s
WHERE s.id = :id
UNION ALL
@@ -100,10 +103,11 @@ class NotifyService < BaseService
)
ELSE
FALSE
- END)
+ END),
+ st.path || s.id
FROM ancestors st
JOIN statuses s ON s.id = st.in_reply_to_id
- WHERE st.replying_to_sender IS FALSE
+ WHERE st.replying_to_sender IS FALSE AND NOT s.id = ANY(path)
)
SELECT COUNT(*)
FROM ancestors st