Skip to content

Commit b63366d

Browse files
authored
fix: prefix subqueries for atomic validations
2 parents 91d9907 + faca770 commit b63366d

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

lib/atomics.ex

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ defmodule AshSql.Atomics do
112112
query =
113113
Map.put(query, :select, %Ecto.Query.SelectExpr{
114114
expr: {:%{}, [], Enum.reverse(selects)},
115-
subqueries: subqueries,
115+
subqueries: Enum.map(subqueries, &set_subquery_prefix(&1, query)),
116116
params: Enum.reverse(params)
117117
})
118118

@@ -123,6 +123,37 @@ defmodule AshSql.Atomics do
123123
end
124124
end
125125

126+
def set_subquery_prefix(sub_query, query) do
127+
%{
128+
sub_query
129+
| query: %{
130+
sub_query.query
131+
| prefix:
132+
subquery_prefix(
133+
sub_query,
134+
query,
135+
sub_query.query.__ash_bindings__.resource
136+
)
137+
}
138+
}
139+
end
140+
141+
defp subquery_prefix(sub_query, base_query, resource) do
142+
if Ash.Resource.Info.multitenancy_strategy(resource) == :context do
143+
sub_query.query.__ash_bindings__.sql_behaviour.schema(resource) ||
144+
Map.get(Map.get(base_query, :__ash_bindings__), :tenant) ||
145+
base_query.prefix ||
146+
sub_query.query.__ash_bindings__.sql_behaviour.repo(resource, :mutate).config()[
147+
:default_prefix
148+
]
149+
else
150+
sub_query.query.__ash_bindings__.sql_behaviour.schema(resource) ||
151+
sub_query.query.__ash_bindings__.sql_behaviour.repo(resource, :mutate).config()[
152+
:default_prefix
153+
]
154+
end
155+
end
156+
126157
defp type_cast_unless_list_of_embedded(expr, attribute) do
127158
type_cast? =
128159
if is_list(expr) do

0 commit comments

Comments
 (0)