@@ -182,7 +182,7 @@ defmodule Ecto.RepoTest do
182182 end
183183
184184 defmodule MySchemaOneField do
185- use Ecto.Schema
185+ use Ecto.Schema
186186
187187 @ primary_key false
188188 schema "my_schema" do
@@ -2211,6 +2211,13 @@ defmodule Ecto.RepoTest do
22112211
22122212 def prepare_query ( op , query , opts ) do
22132213 send ( self ( ) , { op , query , opts } )
2214+
2215+ opts =
2216+ case Keyword . fetch ( opts , :for_on_preloader_spawn ) do
2217+ { :ok , fun } -> [ { :on_preloader_spawn , fun } | opts ]
2218+ _ -> opts
2219+ end
2220+
22142221 { % { query | prefix: "rewritten" } , opts }
22152222 end
22162223 end
@@ -2270,6 +2277,32 @@ defmodule Ecto.RepoTest do
22702277 assert_received { :callback_ran , pid2 } when pid2 != self ( )
22712278 assert pid1 != pid2
22722279 end
2280+
2281+ test "preload with :on_preloader_spawn in prepare_query/3 callback" do
2282+ test_process = self ( )
2283+ fun = fn -> send ( test_process , { :callback_ran , self ( ) } ) end
2284+
2285+ % MySchemaWithMultiAssoc { parent_id: 1 , mother_id: 2 }
2286+ |> PrepareRepo . preload ( [ :parent , :mother ] , for_on_preloader_spawn: fun )
2287+
2288+ assert_received { :callback_ran , pid1 } when pid1 != self ( )
2289+ assert_received { :callback_ran , pid2 } when pid2 != self ( )
2290+ assert pid1 != pid2
2291+ end
2292+
2293+ test "all with preload with :on_preloader_spawn in prepare_query/3 callback" do
2294+ test_process = self ( )
2295+ fun = fn -> send ( test_process , { :callback_ran , self ( ) } ) end
2296+
2297+ from ( p in MyParent ,
2298+ preload: [ :parent , :mother ]
2299+ )
2300+ |> PrepareRepo . all ( for_on_preloader_spawn: fun )
2301+
2302+ assert_received { :callback_ran , pid1 } when pid1 != self ( )
2303+ assert_received { :callback_ran , pid2 } when pid2 != self ( )
2304+ assert pid1 != pid2
2305+ end
22732306 end
22742307
22752308 describe "prepare_transaction" do
0 commit comments