mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
improvement: handle no_attributes?
better in more places
This commit is contained in:
parent
d2e309c126
commit
b4ec957651
2 changed files with 14 additions and 4 deletions
|
@ -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,
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue