improvement: set context once, early

This commit is contained in:
Zach Daniel 2022-12-04 13:35:52 -05:00
parent 534774e1d2
commit e0cbe591ee
2 changed files with 7 additions and 12 deletions

View file

@ -862,6 +862,7 @@ defmodule Ash.Actions.Read do
:distinct,
:select
])
|> Ash.Query.set_context(%{action: ash_query.action})
|> Ash.Query.data_layer_query(only_validate_filter?: true)
ash_query =
@ -901,12 +902,6 @@ defmodule Ash.Actions.Read do
{path, ash_query.tenant, data}
),
filter <- update_aggregate_filters(filter, data, path),
{:ok, query} <-
Ash.DataLayer.set_context(
ash_query.resource,
query,
Map.put(ash_query.context, :action, ash_query.action)
),
{:ok, query} <-
Ash.DataLayer.select(
query,

View file

@ -1946,6 +1946,12 @@ defmodule Ash.Query do
aggregates = Enum.uniq_by(filter_aggregates ++ sort_aggregates, & &1.name)
with {:ok, query} <-
Ash.DataLayer.set_context(
resource,
query,
Map.put(ash_query.context, :action, ash_query.action)
),
{:ok, query} <-
add_tenant(query, ash_query),
{:ok, query} <-
add_aggregates(query, ash_query, aggregates),
@ -1957,12 +1963,6 @@ 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.set_context(
resource,
query,
Map.put(ash_query.context, :action, ash_query.action)
),
{: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}