mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
fix: handle more subquery filter cases for aggregates
This commit is contained in:
parent
f6d029d85b
commit
b6b2dd1dc6
2 changed files with 35 additions and 20 deletions
|
@ -831,23 +831,6 @@ defmodule AshPostgres.DataLayer do
|
|||
end
|
||||
|
||||
defp add_single_aggs(result, resource, query, cant_group) do
|
||||
query =
|
||||
if query.distinct || query.limit do
|
||||
query =
|
||||
query
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|
||||
from(row in subquery(query), as: ^0, select: %{})
|
||||
else
|
||||
query
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|> Ecto.Query.select(%{})
|
||||
end
|
||||
|
||||
Enum.reduce(cant_group, result, fn
|
||||
%{kind: :exists} = agg, result ->
|
||||
{:ok, filtered} =
|
||||
|
@ -859,7 +842,22 @@ defmodule AshPostgres.DataLayer do
|
|||
{:ok, query}
|
||||
end
|
||||
|
||||
filtered = Ecto.Query.exclude(filtered, :distinct)
|
||||
filtered =
|
||||
if filtered.distinct || filtered.limit do
|
||||
filtered =
|
||||
filtered
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|
||||
from(row in subquery(filtered), as: ^0, select: %{})
|
||||
else
|
||||
filtered
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|> Ecto.Query.select(%{})
|
||||
end
|
||||
|
||||
Map.put(
|
||||
result || %{},
|
||||
|
@ -904,6 +902,23 @@ defmodule AshPostgres.DataLayer do
|
|||
filtered
|
||||
end
|
||||
|
||||
filtered =
|
||||
if filtered.limit do
|
||||
filtered =
|
||||
filtered
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|
||||
from(row in subquery(filtered), as: ^0, select: %{})
|
||||
else
|
||||
filtered
|
||||
|> Ecto.Query.exclude(:select)
|
||||
|> Ecto.Query.exclude(:order_by)
|
||||
|> Map.put(:windows, [])
|
||||
|> Ecto.Query.select(%{})
|
||||
end
|
||||
|
||||
first_relationship =
|
||||
Ash.Resource.Info.relationship(resource, agg.relationship_path |> Enum.at(0))
|
||||
|
||||
|
|
|
@ -1170,10 +1170,10 @@ defmodule AshPostgres.AggregateTest do
|
|||
|> Api.create!()
|
||||
|
||||
Post
|
||||
|> Ash.Changeset.new(%{title: "bar"})
|
||||
|> Ash.Changeset.new(%{title: "foo"})
|
||||
|> Api.create!()
|
||||
|
||||
assert 1 ==
|
||||
assert 1 =
|
||||
Post
|
||||
|> Ash.Query.for_read(:title_is_foo)
|
||||
|> Ash.Query.limit(1)
|
||||
|
|
Loading…
Reference in a new issue