diff --git a/.dialyzer_ignore.exs b/.dialyzer_ignore.exs index 91af389..ec61e2a 100644 --- a/.dialyzer_ignore.exs +++ b/.dialyzer_ignore.exs @@ -1,7 +1,3 @@ [ # Hint: mix dialyzer --format ignore_file_strict - - # We don't implement all of the Migration behaviour's possible DDLs, so ignore these errors - {"lib/ecto/adapters/foundationdb.ex", "Type mismatch with behaviour callback to execute_ddl/3."}, - {"lib/ecto/adapters/foundationdb/ecto_adapter_migration.ex", "Type mismatch with behaviour callback to execute_ddl/3."} ] diff --git a/CHANGELOG.md b/CHANGELOG.md index 48d3334..6930e8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v0.7.8 (TBD) + +### Dependencies + +* `ecto ~> 3.14` +* `decimal ~> 3.0` + ## v0.7.7 (2026-08-29) ### Enhancements diff --git a/lib/ecto/adapters/foundationdb/ecto_adapter_queryable.ex b/lib/ecto/adapters/foundationdb/ecto_adapter_queryable.ex index 47da1fb..585e7d1 100644 --- a/lib/ecto/adapters/foundationdb/ecto_adapter_queryable.ex +++ b/lib/ecto/adapters/foundationdb/ecto_adapter_queryable.ex @@ -150,7 +150,7 @@ defmodule Ecto.Adapters.FoundationDB.EctoAdapterQueryable do end def execute_all_from_source(_module, _repo, queryable, {adapter_meta, options}) do - %{opts: repo_config, cache: cache, adapter: adapter, repo: repo} = adapter_meta + %{opts: repo_config, adapter: adapter, repo: repo} = adapter_meta query = Ecto.Queryable.to_query(queryable) @@ -163,7 +163,7 @@ defmodule Ecto.Adapters.FoundationDB.EctoAdapterQueryable do schema: schema }) - {planned_query, dump_params} = plan_query_without_select(repo, cache, adapter, query, options) + {planned_query, dump_params} = plan_query_without_select(repo, adapter, query, options) %Ecto.Query{wheres: wheres, order_bys: order_bys, limit: limit} = planned_query @@ -176,16 +176,25 @@ defmodule Ecto.Adapters.FoundationDB.EctoAdapterQueryable do |> handle_returning(options ++ [returning: {:future, :all_from_source}]) end - defp plan_query_without_select(repo, cache, adapter, query, options) do + defp plan_query_without_select(repo, adapter, query, options) do {query, options} = repo.prepare_query(:all, query, options) - query = Ecto.Query.Planner.attach_prefix(query, options) + query = attach_prefix(query, options) - {_query_meta, {:nocache, {:all, planned_query}}, _cast_params, dump_params} = - Ecto.Query.Planner.query(query, :all, cache, adapter, 0) + {planned_query, _cast_params, dump_params} = + Ecto.Adapter.Queryable.plan_query(:all, adapter, query) {planned_query, dump_params} end + defp attach_prefix(query = %Ecto.Query{prefix: nil}, options) do + case Keyword.fetch(options, :prefix) do + {:ok, prefix} -> %{query | prefix: prefix} + :error -> query + end + end + + defp attach_prefix(query, _options), do: query + defp handle_returning(future, options) do case options[:returning] do {:future, :all_from_source} -> diff --git a/mix.exs b/mix.exs index 530b89a..3ecb66a 100644 --- a/mix.exs +++ b/mix.exs @@ -75,7 +75,7 @@ defmodule EctoFoundationdb.MixProject do defp deps do [ {:erlfdb, "~> 1.2"}, - {:ecto, "~> 3.13"}, + {:ecto, "~> 3.14"}, {:jason, "~> 1.4"}, {:credo, "~> 1.6", only: [:dev, :test, :docs]}, {:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false}, diff --git a/mix.lock b/mix.lock index 4d30c4a..e7868ff 100644 --- a/mix.lock +++ b/mix.lock @@ -2,12 +2,12 @@ "benchee": {:hex, :benchee, "1.5.0", "4d812c31d54b0ec0167e91278e7de3f596324a78a096fd3d0bea68bb0c513b10", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.1", [hex: :statistex, repo: "hexpm", optional: false]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "5b075393aea81b8ae74eadd1c28b1d87e8a63696c649d8293db7c4df3eb67535"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "credo": {:hex, :credo, "1.7.18", "5c5596bf7aedf9c8c227f13272ac499fe8eae6237bd326f2f07dfc173786f042", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "a189d164685fd945809e862fe76a7420c4398fa288d76257662aecb909d6b3e5"}, - "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, + "decimal": {:hex, :decimal, "3.1.1", "430d87b04011ce6cbd4fd205be758311a81f87d552d40904abd00f015935b1d0", [:mix], [], "hexpm", "c5f25f2ced74a0587d03e6023f595db8e924c9d3922c8c8ffd9edfc4498cf1f6"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, "dgen": {:hex, :dgen, "0.2.0", "e0a4d9b1204c6509bfa6691071a1bcb7c9cb08ec6188821d38d4b40fc93af9b0", [:mix, :rebar3], [{:erlfdb, "~> 1.0", [hex: :erlfdb, repo: "hexpm", optional: true]}], "hexpm", "9bff251be1847ded39a8d51cd2bccac5eedc86bfa9e119a992d0ce1945357384"}, "dialyxir": {:hex, :dialyxir, "1.4.7", "dda948fcee52962e4b6c5b4b16b2d8fa7d50d8645bbae8b8685c3f9ecb7f5f4d", [:mix], [{:erlex, ">= 0.2.8", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b34527202e6eb8cee198efec110996c25c5898f43a4094df157f8d28f27d9efe"}, "earmark_parser": {:hex, :earmark_parser, "1.4.44", "f20830dd6b5c77afe2b063777ddbbff09f9759396500cdbe7523efd58d7a339c", [:mix], [], "hexpm", "4778ac752b4701a5599215f7030989c989ffdc4f6df457c5f36938cc2d2a2750"}, - "ecto": {:hex, :ecto, "3.13.5", "9d4a69700183f33bf97208294768e561f5c7f1ecf417e0fa1006e4a91713a834", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "df9efebf70cf94142739ba357499661ef5dbb559ef902b68ea1f3c1fabce36de"}, + "ecto": {:hex, :ecto, "3.14.2", "99db28a864293a789c970651de711e3cae184291e0e7ea1166c54055ac41c1f3", [:mix], [{:decimal, "~> 3.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "25d60b8c816a07d19d85b80bdf60978bd8b102209dda198d768cd7c6745339a6"}, "erlex": {:hex, :erlex, "0.2.8", "cd8116f20f3c0afe376d1e8d1f0ae2452337729f68be016ea544a72f767d9c12", [:mix], [], "hexpm", "9d66ff9fedf69e49dc3fd12831e12a8a37b76f8651dd21cd45fcf5561a8a7590"}, "erlexec": {:hex, :erlexec, "2.2.2", "edb9f1a7d821a9df4efdc82bd11817ab5249dbd294d5c54ec249bd905f10e804", [:rebar3], [], "hexpm", "5e8e3c3773113785361b3b55218d92f7e91509cc9d679bf67c5c3703b394c900"}, "erlfdb": {:hex, :erlfdb, "1.2.1", "dc22993e0bbe0644a6dd4e940e0b49912fdb0703ad150911051100e3ec1d433f", [:rebar3], [], "hexpm", "a58a71b9c074acd47f1d5b32f5dcf40cb491478092d98bc68e0b338bd2a0642a"}, @@ -15,7 +15,7 @@ "ex_fdbmonitor": {:hex, :ex_fdbmonitor, "0.2.1", "8c0d93b16953119c293b7101a8b19770245133b537cf858183cec360bd2c2e78", [:mix], [{:dgen, "~> 0.2", [hex: :dgen, repo: "hexpm", optional: false]}, {:erlexec, "~> 2.0", [hex: :erlexec, repo: "hexpm", optional: false]}, {:erlfdb, "~> 1.0", [hex: :erlfdb, repo: "hexpm", optional: false]}, {:global_flags, "~> 1.0", [hex: :global_flags, repo: "hexpm", optional: false]}, {:local_cluster, "~> 2.0", [hex: :local_cluster, repo: "hexpm", optional: false]}], "hexpm", "e97f49c504af0f7be0eaa98e8f73e73d45f1130bfd7c8cab1e4b59eb09a5ef69"}, "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "global_flags": {:hex, :global_flags, "1.0.0", "ee6b864979a1fb38d1fbc67838565644baf632212bce864adca21042df036433", [:rebar3], [], "hexpm", "85d944cecd0f8f96b20ce70b5b16ebccedfcd25e744376b131e89ce61ba93176"}, - "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, + "jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"}, "local_cluster": {:hex, :local_cluster, "2.1.0", "1c847d69a927ef5a62db13236f93146e8a42377a9c9a5bb4cac3372cba69d683", [:mix], [{:global_flags, "~> 1.0", [hex: :global_flags, repo: "hexpm", optional: false]}], "hexpm", "dc1c3abb6fef00198dd53c855b39ea80c55b3a8059d8d9f17d50da46b1e3b858"}, "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, @@ -30,7 +30,7 @@ "plug": {:hex, :plug, "1.19.1", "09bac17ae7a001a68ae393658aa23c7e38782be5c5c00c80be82901262c394c0", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "560a0017a8f6d5d30146916862aaf9300b7280063651dd7e532b8be168511e62"}, "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, "statistex": {:hex, :statistex, "1.1.0", "7fec1eb2f580a0d2c1a05ed27396a084ab064a40cfc84246dbfb0c72a5c761e5", [:mix], [], "hexpm", "f5950ea26ad43246ba2cce54324ac394a4e7408fdcf98b8e230f503a0cba9cf5"}, - "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, + "telemetry": {:hex, :telemetry, "1.4.2", "a0cb522801dffb1c49fe6e30561badffc7b6d0e180db1300df759faa22062855", [:rebar3], [], "hexpm", "928f6495066506077862c0d1646609eed891a4326bee3126ba54b60af61febb1"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.9", "43dc3ba6d89ef5dec5b1d0a39698436a1e856d000d84bf31a3149862b01a287f", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "5534d5c9adad3c18a0f58a9371220d75a803bf0b9a3d87e6fe072faaeed76a08"}, }