Skip to content

Commit 8e907d6

Browse files
allow string names in field/2
1 parent 8012355 commit 8e907d6

File tree

7 files changed

+31
-6
lines changed

7 files changed

+31
-6
lines changed

lib/ecto/adapters/myxql/connection.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -671,14 +671,14 @@ if Code.ensure_loaded?(MyXQL) do
671671
end
672672

673673
defp expr({{:., _, [{:parent_as, _, [as]}, field]}, _, []}, _sources, query)
674-
when is_atom(field) do
674+
when is_atom(field) or is_binary(field) do
675675
{ix, sources} = get_parent_sources_ix(query, as)
676676
{_, name, _} = elem(sources, ix)
677677
[name, ?. | quote_name(field)]
678678
end
679679

680680
defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query)
681-
when is_atom(field) do
681+
when is_atom(field) or is_binary(field) do
682682
{_, name, _} = elem(sources, idx)
683683
[name, ?. | quote_name(field)]
684684
end

lib/ecto/adapters/postgres/connection.ex

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -916,12 +916,13 @@ if Code.ensure_loaded?(Postgrex) do
916916
end
917917

918918
defp expr({{:., _, [{:parent_as, _, [as]}, field]}, _, []}, _sources, query)
919-
when is_atom(field) do
919+
when is_atom(field) or is_binary(field) do
920920
{ix, sources} = get_parent_sources_ix(query, as)
921921
quote_qualified_name(field, sources, ix)
922922
end
923923

924-
defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query) when is_atom(field) do
924+
defp expr({{:., _, [{:&, _, [idx]}, field]}, _, []}, sources, _query)
925+
when is_atom(field) or is_binary(field) do
925926
quote_qualified_name(field, sources, idx)
926927
end
927928

lib/ecto/adapters/tds/connection.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ if Code.ensure_loaded?(Tds) do
733733
end
734734

735735
defp expr({{:., _, [{:parent_as, _, [as]}, field]}, _, []}, _sources, query)
736-
when is_atom(field) do
736+
when is_atom(field) or is_binary(field) do
737737
{ix, sources} = get_parent_sources_ix(query, as)
738738
{_, name, _} = elem(sources, ix)
739739
[name, ?. | quote_name(field)]

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ defmodule EctoSQL.MixProject do
7676
if path = System.get_env("ECTO_PATH") do
7777
{:ecto, path: path}
7878
else
79-
{:ecto, "~> 3.12"}
79+
{:ecto, git: "https://github.com/greg-rychlewski/ecto.git", branch: "string_field_name"}
8080
end
8181
end
8282

test/ecto/adapters/myxql_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,14 @@ defmodule Ecto.Adapters.MyXQLTest do
16271627
end)
16281628
end
16291629

1630+
test "field/2 with string name" do
1631+
query = from(s in "schema", select: field(s, "x")) |> plan(:all) |> all()
1632+
assert query == ~s{SELECT s0.`x` FROM `schema` AS s0}
1633+
1634+
query = from(s in "schema", as: :schema, select: field(as(:schema), "x")) |> plan(:all) |> all()
1635+
assert query == ~s{SELECT s0.`x` FROM `schema` AS s0}
1636+
end
1637+
16301638
# DDL
16311639

16321640
import Ecto.Migration,

test/ecto/adapters/postgres_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,6 +2033,14 @@ defmodule Ecto.Adapters.PostgresTest do
20332033
end)
20342034
end
20352035

2036+
test "field/2 with string name" do
2037+
query = from(s in "schema", select: field(s, "x")) |> plan(:all) |> all()
2038+
assert query == ~s{SELECT s0."x" FROM "schema" AS s0}
2039+
2040+
query = from(s in "schema", as: :schema, select: field(as(:schema), "x")) |> plan(:all) |> all()
2041+
assert query == ~s{SELECT s0."x" FROM "schema" AS s0}
2042+
end
2043+
20362044
# DDL
20372045

20382046
alias Ecto.Migration.Reference

test/ecto/adapters/tds_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,14 @@ defmodule Ecto.Adapters.TdsTest do
13971397
end)
13981398
end
13991399

1400+
test "field/2 with string name" do
1401+
query = from(s in "schema", select: field(s, "x")) |> plan(:all) |> all()
1402+
assert query == ~s{SELECT s0.[x] FROM [schema] AS s0}
1403+
1404+
query = from(s in "schema", as: :schema, select: field(as(:schema), "x")) |> plan(:all) |> all()
1405+
assert query == ~s{SELECT s0.[x] FROM [schema] AS s0}
1406+
end
1407+
14001408
## DDL
14011409

14021410
import Ecto.Migration,

0 commit comments

Comments
 (0)