Skip to content

Commit c92d8a8

Browse files
committed
WIP tests
1 parent 99d9588 commit c92d8a8

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

lib/ecto/repo.ex

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,11 +644,17 @@ defmodule Ecto.Repo do
644644
def preload(struct_or_structs_or_nil, preloads, opts \\ []) do
645645
repo = get_dynamic_repo()
646646

647+
{adapter_meta, opts} =
648+
_tuplet =
649+
Ecto.Repo.Supervisor.tuplet(repo, prepare_opts(:preload, opts))
650+
651+
{_query, opts} = repo.prepare_query(:preload, struct_or_structs_or_nil, opts)
652+
647653
Ecto.Repo.Preloader.preload(
648654
struct_or_structs_or_nil,
649655
repo,
650656
preloads,
651-
Ecto.Repo.Supervisor.tuplet(repo, prepare_opts(:preload, opts))
657+
{adapter_meta, opts}
652658
)
653659
end
654660

test/ecto/repo_test.exs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)