@@ -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