mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-19 21:13:19 +12:00
improvement: support new from_many?
option
improvement: subquery after distinct to handle distinct
This commit is contained in:
parent
3d9a0cfb4f
commit
d568ac18a8
2 changed files with 11 additions and 2 deletions
|
@ -1856,7 +1856,15 @@ defmodule AshPostgres.DataLayer do
|
|||
|
||||
@impl true
|
||||
def lock(query, :for_update, _) do
|
||||
{:ok, Ecto.Query.lock(query, [{^0, a}], fragment("FOR UPDATE OF ?", a))}
|
||||
if query.distinct do
|
||||
new_query =
|
||||
Ecto.Query.lock(%{query | distinct: nil}, [{^0, a}], fragment("FOR UPDATE OF ?", a))
|
||||
|
||||
q = from(row in subquery(new_query), [])
|
||||
{:ok, %{q | distinct: query.distinct}}
|
||||
else
|
||||
{:ok, Ecto.Query.lock(query, [{^0, a}], fragment("FOR UPDATE OF ?", a))}
|
||||
end
|
||||
end
|
||||
|
||||
@locks [
|
||||
|
|
|
@ -430,7 +430,8 @@ defmodule AshPostgres.Join do
|
|||
def get_binding(_, _, _, _), do: nil
|
||||
|
||||
defp add_distinct(relationship, _join_type, joined_query) do
|
||||
if !joined_query.__ash_bindings__.in_group? && relationship.cardinality == :many &&
|
||||
if !joined_query.__ash_bindings__.in_group? &&
|
||||
(relationship.cardinality == :many || Map.get(relationship, :from_many?)) &&
|
||||
!joined_query.distinct do
|
||||
from(row in joined_query,
|
||||
distinct: ^Ash.Resource.Info.primary_key(joined_query.__ash_bindings__.resource)
|
||||
|
|
Loading…
Reference in a new issue