Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/elixir-mongo/mongodb_ecto
Browse files Browse the repository at this point in the history
…into hundio_switch-mongodb-driver
  • Loading branch information
mweidner037 committed Oct 14, 2024
2 parents 8575318 + 6793f9b commit ea0e4b9
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 20 deletions.
13 changes: 12 additions & 1 deletion lib/mongo_ecto.ex
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,9 @@ defmodule Mongo.Ecto do
end

defp load_binary(%BSON.Binary{binary: binary}), do: {:ok, binary}

defp load_binary(nil), do: {:ok, nil}

defp load_binary(_), do: :error

defp load_objectid(%BSON.ObjectId{} = objectid) do
Expand Down Expand Up @@ -517,6 +520,8 @@ defmodule Mongo.Ecto do
{:ok, dt}
end

defp dump_date(nil), do: {:ok, nil}

defp dump_date(_) do
:error
end
Expand Down Expand Up @@ -571,6 +576,7 @@ defmodule Mongo.Ecto do
defp dump_binary(binary, subtype) when is_binary(binary),
do: {:ok, %BSON.Binary{binary: binary, subtype: subtype}}

defp dump_binary(nil, _), do: {:ok, nil}
defp dump_binary(_, _), do: :error

defp dump_objectid(<<objectid::binary-size(24)>>) do
Expand Down Expand Up @@ -704,7 +710,7 @@ defmodule Mongo.Ecto do
end

@impl true
def delete(repo, meta, filter, opts) do
def delete(repo, meta, filter, _remaining, opts) do
normalized = NormalizedQuery.delete(meta, filter)

Connection.delete(repo, normalized, opts)
Expand Down Expand Up @@ -737,6 +743,11 @@ defmodule Mongo.Ecto do
fun.()
end

@impl true
def checked_out?(_) do
false
end

## Storage

# Noop for MongoDB, as any databases and collections are created as needed.
Expand Down
2 changes: 1 addition & 1 deletion mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"mongodb_driver": {:hex, :mongodb_driver, "1.4.1", "b09d5314acfcc340d4b843220497822ef319c47370bd7769d55b36ed993ac2a2", [:mix], [{:db_connection, "~> 2.6", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 2.1.1", [hex: :decimal, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "abc0ff6ec3a54b64527e4d2da2f761f0ee71759deed2549a9516e4d8d311e42e"},
"nimble_parsec": {:hex, :nimble_parsec, "1.2.0", "b44d75e2a6542dcb6acf5d71c32c74ca88960421b6874777f79153bbbbd7dccc", [:mix], [], "hexpm", "52b2871a7515a5ac49b00f214e4165a40724cf99798d8e4a65e4fd64ebd002c1"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
}
7 changes: 5 additions & 2 deletions test/ecto_test/repo_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ defmodule Ecto.Integration.RepoTest do
# PASSES
test "supports unnamed repos" do
assert {:ok, pid} = TestRepo.start_link(name: nil)
assert Ecto.Repo.Queryable.all(pid, Post, []) == []
assert Ecto.Repo.Queryable.all(pid, Post, Ecto.Repo.Supervisor.tuplet(pid, [])) == []
end

# PASSES
Expand Down Expand Up @@ -1036,7 +1036,10 @@ defmodule Ecto.Integration.RepoTest do
}

assert {1, _} =
TestRepo.insert_all(Post, source, conflict_target: [:id], on_conflict: :replace_all)
TestRepo.insert_all(Post, source,
conflict_target: [:id],
on_conflict: :replace_all
)

expected_id = id + 1
expected_title = "A generic title suffix #{id}"
Expand Down
30 changes: 15 additions & 15 deletions test/ecto_test/type_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ defmodule Ecto.Integration.TypeTest do
end

test "uses default value" do
{_, opts} = Ecto.Repo.Registry.lookup(TestRepo)
Mongo.insert_one(opts.pid, "posts", %{title: "My Post"})
%{pid: pid} = Ecto.Repo.Registry.lookup(TestRepo)
Mongo.insert_one(pid, "posts", %{title: "My Post"})

post = TestRepo.all(Post) |> List.first()
assert post.public == true
Expand Down Expand Up @@ -383,7 +383,7 @@ defmodule Ecto.Integration.TypeTest do
@tag :json_extract_path
test "json_extract_path with primitive values" do
order = %Order{
meta: %{
metadata: %{
:id => 123,
:time => ~T[09:00:00],
"'single quoted'" => "bar",
Expand All @@ -393,30 +393,30 @@ defmodule Ecto.Integration.TypeTest do

TestRepo.insert!(order)

assert TestRepo.one(from o in Order, select: o.meta["id"]) == 123
assert TestRepo.one(from o in Order, select: o.meta["bad"]) == nil
assert TestRepo.one(from o in Order, select: o.meta["bad"]["bad"]) == nil
assert TestRepo.one(from o in Order, select: o.metadata["id"]) == 123
assert TestRepo.one(from o in Order, select: o.metadata["bad"]) == nil
assert TestRepo.one(from o in Order, select: o.metadata["bad"]["bad"]) == nil

field = "id"
assert TestRepo.one(from o in Order, select: o.meta[^field]) == 123
assert TestRepo.one(from o in Order, select: o.meta["time"]) == "09:00:00"
assert TestRepo.one(from o in Order, select: o.meta["'single quoted'"]) == "bar"
assert TestRepo.one(from o in Order, select: o.meta["';"]) == nil
assert TestRepo.one(from o in Order, select: o.meta["\"double quoted\""]) == "baz"
assert TestRepo.one(from o in Order, select: o.metadata[^field]) == 123
assert TestRepo.one(from o in Order, select: o.metadata["time"]) == "09:00:00"
assert TestRepo.one(from o in Order, select: o.metadata["'single quoted'"]) == "bar"
assert TestRepo.one(from o in Order, select: o.metadata["';"]) == nil
assert TestRepo.one(from o in Order, select: o.metadata["\"double quoted\""]) == "baz"
end

# TODO
@tag :map_type
@tag :json_extract_path
test "json_extract_path with arrays and objects" do
order = %Order{meta: %{tags: [%{name: "red"}, %{name: "green"}]}}
order = %Order{metadata: %{tags: [%{name: "red"}, %{name: "green"}]}}
TestRepo.insert!(order)

assert TestRepo.one(from o in Order, select: o.meta["tags"][0]["name"]) == "red"
assert TestRepo.one(from o in Order, select: o.meta["tags"][99]["name"]) == nil
assert TestRepo.one(from o in Order, select: o.metadata["tags"][0]["name"]) == "red"
assert TestRepo.one(from o in Order, select: o.metadata["tags"][99]["name"]) == nil

index = 1
assert TestRepo.one(from o in Order, select: o.meta["tags"][^index]["name"]) == "green"
assert TestRepo.one(from o in Order, select: o.metadata["tags"][^index]["name"]) == "green"
end

# TODO
Expand Down
6 changes: 6 additions & 0 deletions test/mongo_ecto/normalized_query_new_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,8 @@ defmodule Mongo.Ecto.NormalizedQueryNewTest do
end
end

# TODO Fails with invalid expression in where clause
@tag :normalize_fragments_in_where
test "fragments in where" do
query = Schema |> where([], fragment(x: 1)) |> normalize
assert_fields query, query: %{x: 1}
Expand Down Expand Up @@ -400,6 +402,8 @@ defmodule Mongo.Ecto.NormalizedQueryNewTest do
# # query = Schema |> select([], type(^[1,2,3], {:array, Custom.Permalink})) |> normalize
# end

# TODO Fails with invalid expression in where clause
@tag :normalized_nested_expressions
test "nested expressions" do
z = 123

Expand Down Expand Up @@ -471,6 +475,8 @@ defmodule Mongo.Ecto.NormalizedQueryNewTest do
# assert SQL.all(query) == ~s{SELECT ARRAY['abc','def'] FROM "schema" AS m0}
# end

# TODO Fails with invalid expression in limit clause
@tag :normalized_interpolated_values
test "interpolated values" do
query =
Schema
Expand Down
5 changes: 4 additions & 1 deletion test/test_helper.exs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ ExUnit.start(
# For now:
:json_extract_path,
:select_not,
:wont_support
:wont_support,
:normalized_interpolated_values,
:normalized_nested_expressions,
:normalize_fragments_in_where
]
)

Expand Down

0 comments on commit ea0e4b9

Please sign in to comment.