Commit 498327b2 authored by Akihiko Odaki's avatar Akihiko Odaki Committed by Eugen Rochko

Exclude status itself from context query (#7083)

ancestor_statuses and descendant_statuses used to include the root status
itself, but the behavior is confusing because the root status is not
an ancestor nor descendant.
parent 0893b166
...@@ -15,16 +15,12 @@ module StatusThreadingConcern ...@@ -15,16 +15,12 @@ module StatusThreadingConcern
def ancestor_ids def ancestor_ids
Rails.cache.fetch("ancestors:#{id}") do Rails.cache.fetch("ancestors:#{id}") do
ancestors_without_self.pluck(:id) ancestor_statuses.pluck(:id)
end end
end end
def ancestors_without_self
ancestor_statuses - [self]
end
def ancestor_statuses def ancestor_statuses
Status.find_by_sql([<<-SQL.squish, id: id]) Status.find_by_sql([<<-SQL.squish, id: in_reply_to_id])
WITH RECURSIVE search_tree(id, in_reply_to_id, path) WITH RECURSIVE search_tree(id, in_reply_to_id, path)
AS ( AS (
SELECT id, in_reply_to_id, ARRAY[id] SELECT id, in_reply_to_id, ARRAY[id]
...@@ -43,11 +39,7 @@ module StatusThreadingConcern ...@@ -43,11 +39,7 @@ module StatusThreadingConcern
end end
def descendant_ids def descendant_ids
descendants_without_self.pluck(:id) descendant_statuses.pluck(:id)
end
def descendants_without_self
descendant_statuses - [self]
end end
def descendant_statuses def descendant_statuses
...@@ -56,7 +48,7 @@ module StatusThreadingConcern ...@@ -56,7 +48,7 @@ module StatusThreadingConcern
AS ( AS (
SELECT id, ARRAY[id] SELECT id, ARRAY[id]
FROM statuses FROM statuses
WHERE id = :id WHERE in_reply_to_id = :id
UNION ALL UNION ALL
SELECT statuses.id, path || statuses.id SELECT statuses.id, path || statuses.id
FROM search_tree FROM search_tree
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment