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.gh/stable
parent
0893b16695
commit
498327b2e3
|
@ -15,16 +15,12 @@ module StatusThreadingConcern
|
|||
|
||||
def ancestor_ids
|
||||
Rails.cache.fetch("ancestors:#{id}") do
|
||||
ancestors_without_self.pluck(:id)
|
||||
ancestor_statuses.pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
def ancestors_without_self
|
||||
ancestor_statuses - [self]
|
||||
end
|
||||
|
||||
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)
|
||||
AS (
|
||||
SELECT id, in_reply_to_id, ARRAY[id]
|
||||
|
@ -43,11 +39,7 @@ module StatusThreadingConcern
|
|||
end
|
||||
|
||||
def descendant_ids
|
||||
descendants_without_self.pluck(:id)
|
||||
end
|
||||
|
||||
def descendants_without_self
|
||||
descendant_statuses - [self]
|
||||
descendant_statuses.pluck(:id)
|
||||
end
|
||||
|
||||
def descendant_statuses
|
||||
|
@ -56,7 +48,7 @@ module StatusThreadingConcern
|
|||
AS (
|
||||
SELECT id, ARRAY[id]
|
||||
FROM statuses
|
||||
WHERE id = :id
|
||||
WHERE in_reply_to_id = :id
|
||||
UNION ALL
|
||||
SELECT statuses.id, path || statuses.id
|
||||
FROM search_tree
|
||||
|
|
Reference in New Issue