improvement: handle no_attributes? better in more places

This commit is contained in:
Zach Daniel 2023-07-26 18:50:58 -04:00
parent d2e309c126
commit b4ec957651
2 changed files with 14 additions and 4 deletions

View file

@ -906,7 +906,6 @@ defmodule AshPostgres.DataLayer do
root_data, root_data,
[{source_query, source_attribute, destination_attribute, relationship}] [{source_query, source_attribute, destination_attribute, relationship}]
) do ) do
source_values = Enum.map(root_data, &Map.get(&1, source_attribute))
source_query = Ash.Query.new(source_query) source_query = Ash.Query.new(source_query)
base_query = base_query =
@ -959,13 +958,22 @@ defmodule AshPostgres.DataLayer do
end end
|> case do |> case do
{:ok, data_layer_query} -> {:ok, data_layer_query} ->
data_layer_query =
if Map.get(relationship, :no_attributes?) do
data_layer_query
else
source_values = Enum.map(root_data, &Map.get(&1, source_attribute))
from(source in data_layer_query,
where: field(source, ^source_attribute) in ^source_values
)
end
if query.__ash_bindings__[:__order__?] do if query.__ash_bindings__[:__order__?] do
{:ok, {:ok,
from(source in data_layer_query, from(source in data_layer_query,
where: field(source, ^source_attribute) in ^source_values,
inner_lateral_join: destination in ^subquery, inner_lateral_join: destination in ^subquery,
on: true, on: true,
order_by: destination.__order__,
select: destination, select: destination,
select_merge: %{__lateral_join_source__: field(source, ^source_attribute)}, select_merge: %{__lateral_join_source__: field(source, ^source_attribute)},
distinct: true distinct: true
@ -973,7 +981,6 @@ defmodule AshPostgres.DataLayer do
else else
{:ok, {:ok,
from(source in data_layer_query, from(source in data_layer_query,
where: field(source, ^source_attribute) in ^source_values,
inner_lateral_join: destination in ^subquery, inner_lateral_join: destination in ^subquery,
on: true, on: true,
select: destination, select: destination,

View file

@ -1180,6 +1180,9 @@ defmodule AshPostgres.Expr do
field(through, ^first_relationship.source_attribute_on_join_resource) field(through, ^first_relationship.source_attribute_on_join_resource)
) )
Map.get(first_relationship, :no_attributes?) ->
filtered
true -> true ->
source_ref = source_ref =
ref_binding( ref_binding(