Skip to content

Commit c56d0e3

Browse files
update adapters to allow for new splice struture
1 parent d5ab5b5 commit c56d0e3

8 files changed

Lines changed: 29 additions & 8 deletions

File tree

lib/ecto/adapters/myxql/connection.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,8 @@ if Code.ensure_loaded?(MyXQL) do
778778
[to_string(literal)]
779779
end
780780

781-
defp expr({:splice, _, [{:^, _, [_, length]}]}, _sources, _query) do
782-
Enum.intersperse(List.duplicate(??, length), ?,)
781+
defp expr({:splice, _, splice_exprs}, sources, query) do
782+
Enum.map_intersperse(splice_exprs, ",", &expr(&1, sources, query))
783783
end
784784

785785
defp expr({:selected_as, _, [name]}, _sources, _query) do

lib/ecto/adapters/postgres/connection.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -997,8 +997,8 @@ if Code.ensure_loaded?(Postgrex) do
997997
[to_string(literal)]
998998
end
999999

1000-
defp expr({:splice, _, [{:^, _, [idx, length]}]}, _sources, _query) do
1001-
Enum.map_join(1..length, ",", &"$#{idx + &1}")
1000+
defp expr({:splice, _, splice_exprs}, sources, query) do
1001+
Enum.map_intersperse(splice_exprs, ",", &expr(&1, sources, query))
10021002
end
10031003

10041004
defp expr({:selected_as, _, [name]}, _sources, _query) do

lib/ecto/adapters/tds/connection.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -838,8 +838,8 @@ if Code.ensure_loaded?(Tds) do
838838
[to_string(literal)]
839839
end
840840

841-
defp expr({:splice, _, [{:^, _, [idx, length]}]}, _sources, _query) do
842-
list_param_to_args(idx, length)
841+
defp expr({:splice, _, splice_exprs}, sources, query) do
842+
Enum.map_intersperse(splice_exprs, ",", &expr(&1, sources, query))
843843
end
844844

845845
defp expr({:selected_as, _, [name]}, _sources, _query) do

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ defmodule EctoSQL.MixProject do
7878
if path = System.get_env("ECTO_PATH") do
7979
{:ecto, path: path}
8080
else
81-
{:ecto, git: "https://github.com/elixir-ecto/ecto.git", branch: "master"}
81+
{:ecto, git: "https://github.com/greg-rychlewski/ecto.git", branch: "dynamic_splice"}
8282
end
8383
end
8484

mix.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"},
77
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
88
"earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"},
9-
"ecto": {:git, "https://github.com/elixir-ecto/ecto.git", "3ab6a20b255fe2cee1fd9f6ae160c6fde772dce7", [branch: "master"]},
9+
"ecto": {:git, "https://github.com/greg-rychlewski/ecto.git", "13dfff3120fb5fb40bbb690c2699dfa6c73872e5", [branch: "dynamic_splice"]},
1010
"ex_doc": {:hex, :ex_doc, "0.39.1", "e19d356a1ba1e8f8cfc79ce1c3f83884b6abfcb79329d435d4bbb3e97ccc286e", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "8abf0ed3e3ca87c0847dfc4168ceab5bedfe881692f1b7c45f4a11b232806865"},
1111
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
1212
"makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"},

test/ecto/adapters/myxql_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,13 @@ defmodule Ecto.Adapters.MyXQLTest do
672672

673673
assert all(query) == ~s{SELECT s0.`x` FROM `schema` AS s0 WHERE (s0.`x` in (?,?,?,?,?))}
674674

675+
query =
676+
Schema
677+
|> select([_], fragment("concat_ws(?,?)", ".", splice(^["public", dynamic([r], r.x)])))
678+
|> plan()
679+
680+
assert all(query) == ~s{SELECT concat_ws('.',?,s0.`x`) FROM `schema` AS s0}
681+
675682
value = 13
676683
query = Schema |> select([r], fragment("lcase(?, ?)", r.x, ^value)) |> plan()
677684
assert all(query) == ~s{SELECT lcase(s0.`x`, ?) FROM `schema` AS s0}

test/ecto/adapters/postgres_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,13 @@ defmodule Ecto.Adapters.PostgresTest do
852852

853853
assert all(query) == ~s{SELECT s0."x" FROM "schema" AS s0 WHERE (s0."x" in ($1,$2,$3,$4,$5))}
854854

855+
query =
856+
Schema
857+
|> select([_], fragment("concat_ws(?,?)", ".", splice(^["public", dynamic([r], r.x)])))
858+
|> plan()
859+
860+
assert all(query) == ~s{SELECT concat_ws('.',$1,s0."x") FROM "schema" AS s0}
861+
855862
value = 13
856863
query = Schema |> select([r], fragment("downcase(?, ?)", r.x, ^value)) |> plan()
857864
assert all(query) == ~s{SELECT downcase(s0."x", $1) FROM "schema" AS s0}

test/ecto/adapters/tds_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,13 @@ defmodule Ecto.Adapters.TdsTest do
708708

709709
assert all(query) == ~s{SELECT s0.[x] FROM [schema] AS s0 WHERE (s0.[x] in (@1,@2,@3,@4,@5))}
710710

711+
query =
712+
Schema
713+
|> select([_], fragment("concat_ws(?,?)", ".", splice(^["public", dynamic([r], r.x)])))
714+
|> plan()
715+
716+
assert all(query) == ~s{SELECT concat_ws(N'.',@1,s0.[x]) FROM [schema] AS s0}
717+
711718
value = 13
712719
query = Schema |> select([r], fragment("lower(?)", ^value)) |> plan()
713720
assert all(query) == ~s{SELECT lower(@1) FROM [schema] AS s0}

0 commit comments

Comments
 (0)