forked from AkkomaGang/akkoma
[#3213] Experimental / debug feature: database: [improved_hashtag_timeline: :preselect_hashtag_ids]
.
This commit is contained in:
parent
b981edad8a
commit
998437d4a4
1 changed files with 35 additions and 12 deletions
|
@ -787,19 +787,42 @@ defp restrict_hashtag_any(_query, %{tag: _tag, skip_preload: true}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict_hashtag_any(query, %{tag: [_ | _] = tags}) do
|
defp restrict_hashtag_any(query, %{tag: [_ | _] = tags}) do
|
||||||
from(
|
# TODO: refactor: debug / experimental feature
|
||||||
[_activity, object] in query,
|
if Config.get([:database, :improved_hashtag_timeline]) == :preselect_hashtag_ids do
|
||||||
where:
|
hashtag_ids =
|
||||||
fragment(
|
from(ht in Pleroma.Hashtag,
|
||||||
"""
|
where: fragment("name = ANY(?::citext[])", ^tags),
|
||||||
EXISTS (SELECT 1 FROM hashtags JOIN hashtags_objects
|
select: ht.id
|
||||||
ON hashtags_objects.hashtag_id = hashtags.id WHERE hashtags.name = ANY(?::citext[])
|
|
||||||
AND hashtags_objects.object_id = ? LIMIT 1)
|
|
||||||
""",
|
|
||||||
^tags,
|
|
||||||
object.id
|
|
||||||
)
|
)
|
||||||
)
|
|> Repo.all()
|
||||||
|
|
||||||
|
from(
|
||||||
|
[_activity, object] in query,
|
||||||
|
where:
|
||||||
|
fragment(
|
||||||
|
"""
|
||||||
|
EXISTS (
|
||||||
|
SELECT 1 FROM hashtags_objects WHERE hashtag_id = ANY(?) AND object_id = ? LIMIT 1)
|
||||||
|
""",
|
||||||
|
^hashtag_ids,
|
||||||
|
object.id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else
|
||||||
|
from(
|
||||||
|
[_activity, object] in query,
|
||||||
|
where:
|
||||||
|
fragment(
|
||||||
|
"""
|
||||||
|
EXISTS (SELECT 1 FROM hashtags JOIN hashtags_objects
|
||||||
|
ON hashtags_objects.hashtag_id = hashtags.id WHERE hashtags.name = ANY(?::citext[])
|
||||||
|
AND hashtags_objects.object_id = ? LIMIT 1)
|
||||||
|
""",
|
||||||
|
^tags,
|
||||||
|
object.id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp restrict_hashtag_any(query, %{tag: tag}) when is_binary(tag) do
|
defp restrict_hashtag_any(query, %{tag: tag}) when is_binary(tag) do
|
||||||
|
|
Loading…
Reference in a new issue