mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
fix: properly handle nested calculation selects
This commit is contained in:
parent
7f1ee67dde
commit
a9db35e79f
2 changed files with 13 additions and 8 deletions
|
@ -1176,8 +1176,18 @@ defmodule Ash.Actions.Read do
|
|||
calc.required_loads
|
||||
|> List.wrap()
|
||||
|> Enum.concat(List.wrap(calc.select))
|
||||
|> Enum.map(fn required_load ->
|
||||
Map.get(loaded.calculations, required_load)
|
||||
|> Enum.map(fn
|
||||
{required_load, _input} when is_atom(required_load) ->
|
||||
Map.get(loaded.calculations, required_load)
|
||||
|
||||
required_load when is_atom(required_load) ->
|
||||
Map.get(loaded.calculations, required_load)
|
||||
|
||||
%Ash.Query.Calculation{} = calc ->
|
||||
calc
|
||||
|
||||
_ ->
|
||||
nil
|
||||
end)
|
||||
|> Enum.filter(& &1)
|
||||
|
||||
|
@ -1559,7 +1569,6 @@ defmodule Ash.Actions.Read do
|
|||
|
||||
defp calc_dependencies(calc, query, api, actor, authorize?, tenant, tracer, opts \\ []) do
|
||||
calc.required_loads
|
||||
|> Ash.Query.reify_calculations(query)
|
||||
|> expand_load_paths(query, api, actor, authorize?, tenant, tracer, opts[:recurse?] || false)
|
||||
|> Enum.uniq()
|
||||
end
|
||||
|
@ -1686,7 +1695,6 @@ defmodule Ash.Actions.Read do
|
|||
[%{path: path, type: :calculation, calculation: calculation}]
|
||||
else
|
||||
calculation.required_loads
|
||||
|> Ash.Query.reify_calculations(query)
|
||||
|> expand_load_paths(query, api, actor, authorize?, tenant, tracer, false, path)
|
||||
|> Enum.concat([%{path: path, type: :calculation, calculation: calculation}])
|
||||
end
|
||||
|
@ -1715,13 +1723,10 @@ defmodule Ash.Actions.Read do
|
|||
calculation = Ash.Resource.Info.calculation(query.resource, other) ->
|
||||
{:ok, calculation} = Ash.Query.resource_calc_to_calc(query, other, calculation)
|
||||
|
||||
[calculation] = Ash.Query.reify_calculations([calculation], query)
|
||||
|
||||
if stop? do
|
||||
[%{path: path, type: :calculation, calculation: calculation}]
|
||||
else
|
||||
calculation.required_loads
|
||||
|> Ash.Query.reify_calculations(query)
|
||||
|> expand_load_paths(query, api, actor, authorize?, tenant, tracer, false, path)
|
||||
|> Enum.concat([%{path: path, type: :calculation, calculation: calculation}])
|
||||
end
|
||||
|
|
|
@ -855,7 +855,7 @@ defmodule Ash.Test.CalculationTest do
|
|||
end
|
||||
|
||||
test "loading a calculation with selects that loads a calculation with selects works" do
|
||||
assert ["brian brian", "zach zach"] ==
|
||||
assert ["brian cranston brian", "zach daniel zach"] ==
|
||||
User
|
||||
|> Ash.Query.select([])
|
||||
|> Ash.Query.load([
|
||||
|
|
Loading…
Reference in a new issue