Skip to content

Commit 2091490

Browse files
Revert "Allow numbers in literal/1 (#651)" and add support for identifier/1 and constant/1 (#652)
1 parent 510cd90 commit 2091490

File tree

7 files changed

+34
-13
lines changed

7 files changed

+34
-13
lines changed

lib/ecto/adapters/myxql/connection.ex

+6-2
Original file line numberDiff line numberDiff line change
@@ -746,11 +746,15 @@ if Code.ensure_loaded?(MyXQL) do
746746
[?(, values_list(types, num_rows, query), ?)]
747747
end
748748

749-
defp expr({:literal, _, [literal]}, _sources, _query) when is_binary(literal) do
749+
defp expr({:identifier, _, [literal]}, _sources, _query) do
750750
quote_name(literal)
751751
end
752752

753-
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
753+
defp expr({:constant, _, [literal]}, _sources, _query) when is_binary(literal) do
754+
[?', escape_string(literal), ?']
755+
end
756+
757+
defp expr({:constant, _, [literal]}, _sources, _query) when is_number(literal) do
754758
[to_string(literal)]
755759
end
756760

lib/ecto/adapters/postgres/connection.ex

+6-2
Original file line numberDiff line numberDiff line change
@@ -987,11 +987,15 @@ if Code.ensure_loaded?(Postgrex) do
987987
[?(, values_list(types, idx + 1, num_rows), ?)]
988988
end
989989

990-
defp expr({:literal, _, [literal]}, _sources, _query) when is_binary(literal) do
990+
defp expr({:identifier, _, [literal]}, _sources, _query) do
991991
quote_name(literal)
992992
end
993993

994-
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
994+
defp expr({:constant, _, [literal]}, _sources, _query) when is_binary(literal) do
995+
[?', escape_string(literal), ?']
996+
end
997+
998+
defp expr({:constant, _, [literal]}, _sources, _query) when is_number(literal) do
995999
[to_string(literal)]
9961000
end
9971001

lib/ecto/adapters/tds/connection.ex

+6-2
Original file line numberDiff line numberDiff line change
@@ -826,11 +826,15 @@ if Code.ensure_loaded?(Tds) do
826826
[?(, values_list(types, idx + 1, num_rows), ?)]
827827
end
828828

829-
defp expr({:literal, _, [literal]}, _sources, _query) when is_binary(literal) do
829+
defp expr({:identifier, _, [literal]}, _sources, _query) do
830830
quote_name(literal)
831831
end
832832

833-
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
833+
defp expr({:constant, _, [literal]}, _sources, _query) when is_binary(literal) do
834+
[?', escape_string(literal), ?']
835+
end
836+
837+
defp expr({:constant, _, [literal]}, _sources, _query) when is_number(literal) do
834838
[to_string(literal)]
835839
end
836840

mix.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"},
55
"deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"},
66
"earmark_parser": {:hex, :earmark_parser, "1.4.41", "ab34711c9dc6212dda44fcd20ecb87ac3f3fce6f0ca2f28d4a00e4154f8cd599", [:mix], [], "hexpm", "a81a04c7e34b6617c2792e291b5a2e57ab316365c2644ddc553bb9ed863ebefa"},
7-
"ecto": {:git, "https://github.com/elixir-ecto/ecto.git", "3ab8279b574b0162372c838441ce9ec1772a71e1", []},
7+
"ecto": {:git, "https://github.com/elixir-ecto/ecto.git", "b02e921b7d2a2a4d5a73fe0ead6500a6bec9d207", []},
88
"ex_doc": {:hex, :ex_doc, "0.34.2", "13eedf3844ccdce25cfd837b99bea9ad92c4e511233199440488d217c92571e8", [:mix], [{:earmark_parser, "~> 1.4.39", [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", "5ce5f16b41208a50106afed3de6a2ed34f4acfd65715b82a0b84b49d995f95c1"},
99
"jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"},
1010
"makeup": {:hex, :makeup, "1.1.2", "9ba8837913bdf757787e71c1581c21f9d2455f4dd04cfca785c70bbfff1a76a3", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cce1566b81fbcbd21eca8ffe808f33b221f9eee2cbc7a1706fc3da9ff18e6cac"},

test/ecto/adapters/myxql_test.exs

+5-2
Original file line numberDiff line numberDiff line change
@@ -655,12 +655,15 @@ defmodule Ecto.Adapters.MyXQLTest do
655655
query = Schema |> select([r], r.x) |> where([], fragment("? = \"query\\?\"", ^10)) |> plan()
656656
assert all(query) == ~s{SELECT s0.`x` FROM `schema` AS s0 WHERE (? = \"query?\")}
657657

658-
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"es_ES"))) |> plan()
658+
query = Schema |> select([r], fragment("? COLLATE ?", r.x, identifier(^"es_ES"))) |> plan()
659659
assert all(query) == ~s{SELECT s0.`x` COLLATE `es_ES` FROM `schema` AS s0}
660660

661-
query = Schema |> select([r], r.x) |> limit(fragment("?", literal(^1))) |> plan()
661+
query = Schema |> select([r], r.x) |> limit(fragment("?", constant(^1))) |> plan()
662662
assert all(query) == ~s{SELECT s0.`x` FROM `schema` AS s0 LIMIT 1}
663663

664+
query = Schema |> select(fragment("?", constant(^"let's escape"))) |> plan()
665+
assert all(query) == ~s{SELECT 'let''s escape' FROM `schema` AS s0}
666+
664667
query =
665668
Schema
666669
|> select([r], r.x)

test/ecto/adapters/postgres_test.exs

+5-2
Original file line numberDiff line numberDiff line change
@@ -835,12 +835,15 @@ defmodule Ecto.Adapters.PostgresTest do
835835
query = Schema |> select([r], fragment("downcase(?)", r.x)) |> plan()
836836
assert all(query) == ~s{SELECT downcase(s0."x") FROM "schema" AS s0}
837837

838-
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"es_ES"))) |> plan()
838+
query = Schema |> select([r], fragment("? COLLATE ?", r.x, identifier(^"es_ES"))) |> plan()
839839
assert all(query) == ~s{SELECT s0."x" COLLATE "es_ES" FROM "schema" AS s0}
840840

841-
query = Schema |> select([r], r.x) |> limit(fragment("?", literal(^1))) |> plan()
841+
query = Schema |> select([r], r.x) |> limit(fragment("?", constant(^1))) |> plan()
842842
assert all(query) == ~s{SELECT s0."x" FROM "schema" AS s0 LIMIT 1}
843843

844+
query = Schema |> select(fragment("?", constant(^"let's escape"))) |> plan()
845+
assert all(query) == ~s{SELECT 'let''s escape' FROM "schema" AS s0}
846+
844847
query =
845848
Schema
846849
|> select([r], r.x)

test/ecto/adapters/tds_test.exs

+5-2
Original file line numberDiff line numberDiff line change
@@ -691,12 +691,15 @@ defmodule Ecto.Adapters.TdsTest do
691691
query = Schema |> select([r], fragment("lower(?)", r.x)) |> plan()
692692
assert all(query) == ~s{SELECT lower(s0.[x]) FROM [schema] AS s0}
693693

694-
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"es_ES"))) |> plan()
694+
query = Schema |> select([r], fragment("? COLLATE ?", r.x, identifier(^"es_ES"))) |> plan()
695695
assert all(query) == ~s{SELECT s0.[x] COLLATE [es_ES] FROM [schema] AS s0}
696696

697-
query = Schema |> select([r], r.x) |> limit(fragment("?", literal(^1))) |> plan()
697+
query = Schema |> select([r], r.x) |> limit(fragment("?", constant(^1))) |> plan()
698698
assert all(query) == ~s{SELECT TOP(1) s0.[x] FROM [schema] AS s0}
699699

700+
query = Schema |> select(fragment("?", constant(^"let's escape"))) |> plan()
701+
assert all(query) == ~s{SELECT 'let''s escape' FROM [schema] AS s0}
702+
700703
query =
701704
Schema
702705
|> select([r], r.x)

0 commit comments

Comments
 (0)