Skip to content

Commit 8727a74

Browse files
committed
Consider dynamic repo in Ecto.Adapters.SQL operations
Closes #386.
1 parent dd488c0 commit 8727a74

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

integration_test/sql/sql.exs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ defmodule Ecto.Integration.SQLTest do
2929
end
3030

3131
test "query!/4 with dynamic repo" do
32-
TestRepo.put_dynamic_repo(:unknown)
33-
assert_raise RuntimeError, ~r/:unknown/, fn -> TestRepo.query!("SELECT 1") end
32+
pid = spawn(fn -> :ok end)
33+
TestRepo.put_dynamic_repo(pid)
34+
assert_raise ArgumentError, fn -> TestRepo.query!("SELECT 1") end
35+
36+
TestRepo.put_dynamic_repo(pid)
37+
assert_raise ArgumentError, fn -> Ecto.Adapters.SQL.query!(TestRepo, "SELECT 1") end
3438
end
3539

3640
test "query!/4" do

lib/ecto/adapters/sql.ex

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ defmodule Ecto.Adapters.SQL do
333333
def explain(repo, operation, queryable, opts \\ [])
334334

335335
def explain(repo, operation, queryable, opts) when is_atom(repo) or is_pid(repo) do
336-
explain(Ecto.Adapter.lookup_meta(repo), operation, queryable, opts)
336+
explain(lookup_meta(repo), operation, queryable, opts)
337337
end
338338

339339
def explain(%{repo: repo} = adapter_meta, operation, queryable, opts) do
@@ -378,7 +378,7 @@ defmodule Ecto.Adapters.SQL do
378378
def disconnect_all(repo, interval, opts \\ [])
379379

380380
def disconnect_all(repo, interval, opts) when is_atom(repo) or is_pid(repo) do
381-
disconnect_all(Ecto.Adapter.lookup_meta(repo), interval, opts)
381+
disconnect_all(lookup_meta(repo), interval, opts)
382382
end
383383

384384
def disconnect_all(%{pid: pid} = _adapter_meta, interval, opts) do
@@ -416,7 +416,7 @@ defmodule Ecto.Adapters.SQL do
416416
@spec stream(Ecto.Repo.t, String.t, [term], Keyword.t) :: Enum.t
417417
def stream(repo, sql, params \\ [], opts \\ []) do
418418
repo
419-
|> Ecto.Adapter.lookup_meta()
419+
|> lookup_meta()
420420
|> Ecto.Adapters.SQL.Stream.build(sql, params, opts)
421421
end
422422

@@ -470,7 +470,7 @@ defmodule Ecto.Adapters.SQL do
470470
def query(repo, sql, params \\ [], opts \\ [])
471471

472472
def query(repo, sql, params, opts) when is_atom(repo) or is_pid(repo) do
473-
query(Ecto.Adapter.lookup_meta(repo), sql, params, opts)
473+
query(lookup_meta(repo), sql, params, opts)
474474
end
475475

476476
def query(adapter_meta, sql, params, opts) do
@@ -527,7 +527,7 @@ defmodule Ecto.Adapters.SQL do
527527
def query_many(repo, sql, params \\ [], opts \\ [])
528528

529529
def query_many(repo, sql, params, opts) when is_atom(repo) or is_pid(repo) do
530-
query_many(Ecto.Adapter.lookup_meta(repo), sql, params, opts)
530+
query_many(lookup_meta(repo), sql, params, opts)
531531
end
532532

533533
def query_many(adapter_meta, sql, params, opts) do
@@ -559,7 +559,7 @@ defmodule Ecto.Adapters.SQL do
559559
"""
560560
@spec table_exists?(Ecto.Repo.t, table :: String.t) :: boolean
561561
def table_exists?(repo, table) when is_atom(repo) do
562-
%{sql: sql} = adapter_meta = Ecto.Adapter.lookup_meta(repo)
562+
%{sql: sql} = adapter_meta = lookup_meta(repo)
563563
{query, params} = sql.table_exists_query(table)
564564
query!(adapter_meta, query, params, []).num_rows != 0
565565
end
@@ -1009,6 +1009,16 @@ defmodule Ecto.Adapters.SQL do
10091009
end
10101010
end
10111011

1012+
## Meta
1013+
1014+
defp lookup_meta(repo) when is_atom(repo) do
1015+
Ecto.Adapter.lookup_meta(repo.get_dynamic_repo())
1016+
end
1017+
1018+
defp lookup_meta(pid) when is_pid(pid) do
1019+
Ecto.Adapter.lookup_meta(pid)
1020+
end
1021+
10121022
## Migrations
10131023

10141024
@doc false

0 commit comments

Comments
 (0)