From 48fb2d0d0befa5a34e30624f04e23689c81c5276 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Tue, 23 Feb 2021 15:14:37 +0300 Subject: [PATCH] using exists instead of join with distinct --- lib/pleroma/user/query.ex | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 2c29aef3d..f5f742bd1 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -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