mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
fix: various issues w/ over/under-selecting data
This commit is contained in:
parent
695c2bb09a
commit
caf9a2340e
4 changed files with 27 additions and 6 deletions
|
@ -692,7 +692,15 @@ defmodule Ash.Actions.Read do
|
|||
else
|
||||
query =
|
||||
initial_query
|
||||
|> Ash.Query.unset([:filter, :aggregates, :sort, :limit, :offset, :distinct])
|
||||
|> Ash.Query.unset([
|
||||
:filter,
|
||||
:aggregates,
|
||||
:sort,
|
||||
:limit,
|
||||
:offset,
|
||||
:distinct,
|
||||
:select
|
||||
])
|
||||
|> Ash.Query.data_layer_query(only_validate_filter?: true)
|
||||
|
||||
ash_query =
|
||||
|
|
|
@ -340,7 +340,7 @@ defmodule Ash.DataLayer do
|
|||
end
|
||||
end
|
||||
|
||||
@spec select(data_layer_query(), offset :: list(atom), Ash.Resource.t()) ::
|
||||
@spec select(data_layer_query(), select :: list(atom), Ash.Resource.t()) ::
|
||||
{:ok, data_layer_query()} | {:error, term}
|
||||
def select(query, nil, _resource), do: {:ok, query}
|
||||
|
||||
|
|
|
@ -296,7 +296,9 @@ defmodule Ash.Query.Aggregate do
|
|||
{:ok, %{}}
|
||||
else
|
||||
initial_query =
|
||||
Ash.Query.unset(initial_query, [:filter, :sort, :aggregates, :limit, :offset])
|
||||
initial_query
|
||||
|> Ash.Query.unset([:filter, :sort, :aggregates, :limit, :offset, :select])
|
||||
|> Ash.Query.select([])
|
||||
|
||||
query =
|
||||
case records do
|
||||
|
|
|
@ -724,9 +724,19 @@ defmodule Ash.Query do
|
|||
query = to_query(query)
|
||||
|
||||
if opts[:replace?] do
|
||||
%{query | select: Enum.uniq(List.wrap(fields))}
|
||||
%{
|
||||
query
|
||||
| select: Enum.uniq(List.wrap(fields) ++ Ash.Resource.Info.primary_key(query.resource))
|
||||
}
|
||||
else
|
||||
%{query | select: Enum.uniq(List.wrap(fields) ++ (query.select || []))}
|
||||
%{
|
||||
query
|
||||
| select:
|
||||
Enum.uniq(
|
||||
List.wrap(fields) ++
|
||||
(query.select || []) ++ Ash.Resource.Info.primary_key(query.resource)
|
||||
)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1986,7 +1996,8 @@ defmodule Ash.Query do
|
|||
resource,
|
||||
query,
|
||||
Map.put(ash_query.context, :action, ash_query.action)
|
||||
) do
|
||||
),
|
||||
{:ok, query} <- Ash.DataLayer.select(query, ash_query.select, ash_query.resource) do
|
||||
if opts[:no_modify?] || !ash_query.action || !ash_query.action.modify_query do
|
||||
{:ok, query}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue