mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
improvement: add a return_query/2
callback for data layers
This commit is contained in:
parent
dcc280cb2d
commit
b600b23803
3 changed files with 20 additions and 1 deletions
|
@ -1473,6 +1473,8 @@ defmodule Ash.Actions.Read do
|
|||
{:ok, query} <- set_tenant(query, ash_query),
|
||||
{:ok, query} <-
|
||||
Ash.DataLayer.lock(query, ash_query.lock, ash_query.resource),
|
||||
{:ok, query} <-
|
||||
Ash.DataLayer.return_query(query, ash_query.resource),
|
||||
{:ok, results} <-
|
||||
run_query(
|
||||
set_phase(ash_query, :executing),
|
||||
|
|
|
@ -163,6 +163,9 @@ defmodule Ash.DataLayer do
|
|||
) ::
|
||||
{:ok, list(Ash.Resource.record())} | {:error, term}
|
||||
|
||||
@callback return_query(data_layer_query(), Ash.Resource.t()) ::
|
||||
{:ok, data_layer_query()} | {:error, term}
|
||||
|
||||
@type bulk_options :: %{
|
||||
batch_size: pos_integer,
|
||||
return_records?: boolean,
|
||||
|
@ -238,6 +241,7 @@ defmodule Ash.DataLayer do
|
|||
run_query: 2,
|
||||
bulk_create: 3,
|
||||
distinct: 3,
|
||||
return_query: 2,
|
||||
lock: 3,
|
||||
run_query_with_lateral_join: 4,
|
||||
create: 2,
|
||||
|
@ -385,6 +389,18 @@ defmodule Ash.DataLayer do
|
|||
Ash.DataLayer.data_layer(resource).create(resource, changeset)
|
||||
end
|
||||
|
||||
@spec return_query(data_layer_query(), Ash.Resource.t()) ::
|
||||
{:ok, data_layer_query()} | {:error, term}
|
||||
def return_query(query, resource) do
|
||||
data_layer = Ash.DataLayer.data_layer(resource)
|
||||
|
||||
if function_exported?(data_layer, :return_query, 2) do
|
||||
data_layer.return_query(query, resource)
|
||||
else
|
||||
{:ok, query}
|
||||
end
|
||||
end
|
||||
|
||||
@spec bulk_create(
|
||||
Ash.Resource.t(),
|
||||
Enumerable.t(Ash.Changeset.t()),
|
||||
|
|
|
@ -2626,7 +2626,8 @@ defmodule Ash.Query do
|
|||
Ash.DataLayer.limit(query, ash_query.limit, resource),
|
||||
{:ok, query} <-
|
||||
Ash.DataLayer.offset(query, ash_query.offset, resource),
|
||||
{:ok, query} <- Ash.DataLayer.lock(query, ash_query.lock, resource) do
|
||||
{:ok, query} <- Ash.DataLayer.lock(query, ash_query.lock, resource),
|
||||
{:ok, query} <- Ash.DataLayer.return_query(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