Skip to content

Commit 64322da

Browse files
allow numbers in literal/1
1 parent 802914d commit 64322da

File tree

7 files changed

+25
-4
lines changed

7 files changed

+25
-4
lines changed

lib/ecto/adapters/myxql/connection.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,10 +746,14 @@ if Code.ensure_loaded?(MyXQL) do
746746
[?(, values_list(types, num_rows, query), ?)]
747747
end
748748

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

753+
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
754+
[to_string(literal)]
755+
end
756+
753757
defp expr({:splice, _, [{:^, _, [_, length]}]}, _sources, _query) do
754758
Enum.intersperse(List.duplicate(??, length), ?,)
755759
end

lib/ecto/adapters/postgres/connection.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -987,10 +987,14 @@ if Code.ensure_loaded?(Postgrex) do
987987
[?(, values_list(types, idx + 1, num_rows), ?)]
988988
end
989989

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

994+
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
995+
[to_string(literal)]
996+
end
997+
994998
defp expr({:splice, _, [{:^, _, [idx, length]}]}, _sources, _query) do
995999
Enum.map_join(1..length, ",", &"$#{idx + &1}")
9961000
end

lib/ecto/adapters/tds/connection.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,10 +826,14 @@ if Code.ensure_loaded?(Tds) do
826826
[?(, values_list(types, idx + 1, num_rows), ?)]
827827
end
828828

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

833+
defp expr({:literal, _, [literal]}, _sources, _query) when is_number(literal) do
834+
[to_string(literal)]
835+
end
836+
833837
defp expr({:splice, _, [{:^, _, [idx, length]}]}, _sources, _query) do
834838
list_param_to_args(idx, length)
835839
end

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, github: "elixir-ecto/ecto"}
79+
{:ecto, github: "greg-rychlewski/ecto", branch: "literal_numbers"}
8080
end
8181
end
8282

test/ecto/adapters/myxql_test.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,9 @@ defmodule Ecto.Adapters.MyXQLTest do
658658
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"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()
662+
assert all(query) == ~s{SELECT s0.`x` FROM `schema` AS s0 LIMIT 1}
663+
661664
query =
662665
Schema
663666
|> select([r], r.x)

test/ecto/adapters/postgres_test.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,9 @@ defmodule Ecto.Adapters.PostgresTest do
838838
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"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()
842+
assert all(query) == ~s{SELECT s0."x" FROM "schema" AS s0 LIMIT 1}
843+
841844
query =
842845
Schema
843846
|> select([r], r.x)

test/ecto/adapters/tds_test.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,9 @@ defmodule Ecto.Adapters.TdsTest do
694694
query = Schema |> select([r], fragment("? COLLATE ?", r.x, literal(^"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()
698+
assert all(query) == ~s{SELECT TOP(1) s0.[x] FROM [schema] AS s0}
699+
697700
query =
698701
Schema
699702
|> select([r], r.x)

0 commit comments

Comments
 (0)