diff --git a/lib/dataloader/ecto.ex b/lib/dataloader/ecto.ex index 16cff07..8226564 100644 --- a/lib/dataloader/ecto.ex +++ b/lib/dataloader/ecto.ex @@ -925,7 +925,8 @@ if Code.ensure_loaded?(Ecto) do build_preload_lateral_query(rest, join_query, :join_last) end - defp maybe_distinct(%Ecto.Query{distinct: dist} = query, _) when dist, do: query + defp maybe_distinct(%Ecto.Query{distinct: distinct} = query, _) when not is_nil(distinct), + do: query defp maybe_distinct(query, [%Ecto.Association.Has{}, %Ecto.Association.BelongsTo{} | _]), do: distinct(query, true) diff --git a/test/dataloader/ecto/limit_query_test.exs b/test/dataloader/ecto/limit_query_test.exs index f0d598d..853fb7f 100644 --- a/test/dataloader/ecto/limit_query_test.exs +++ b/test/dataloader/ecto/limit_query_test.exs @@ -36,21 +36,21 @@ defmodule Dataloader.LimitQueryTest do |> preload(likes: :user) end - defp query(schema, %{limit: limit, order_by: order_by}, test_pid) do + defp query(schema, %{limit: limit, distinct: true, order_by: order_by}, test_pid) do send(test_pid, :querying) schema |> order_by(^order_by) |> limit(^limit) + |> distinct(true) end - defp query(schema, %{limit: limit, distinct: true, order_by: order_by}, test_pid) do + defp query(schema, %{limit: limit, order_by: order_by}, test_pid) do send(test_pid, :querying) schema |> order_by(^order_by) |> limit(^limit) - |> distinct(true) end test "Query limit does not apply globally", %{loader: loader} do