using exists instead of join with distinct

This commit is contained in:
Alexander Strizhakov 2021-02-23 15:14:37 +03:00
parent b1f9fa5245
commit 48fb2d0d0b
No known key found for this signature in database
GPG Key ID: 022896A53AEF1381

View File

@ -109,14 +109,21 @@ defmodule Pleroma.User.Query do
end
defp compose_query({:tags, tags}, query) when is_list(tags) and length(tags) > 0 do
users_with_tags_query =
from(u in User,
join: t in assoc(u, :tags),
where: t.name in ^tags,
distinct: u
)
from(u in query, join: ut in subquery(users_with_tags_query), on: ut.id == u.id)
from(u in query,
where:
fragment(
"""
EXISTS (
SELECT 1 FROM tags t
JOIN users_tags ut ON ut.tag_id = t.id AND ut.user_id = ?
WHERE t.name = ANY(?)
LIMIT 1
)
""",
u.id,
^tags
)
)
end
defp compose_query({:is_admin, bool}, query) do