diff --git a/integration_test/test_helper.exs b/integration_test/test_helper.exs index 1805346..a5dd7b9 100644 --- a/integration_test/test_helper.exs +++ b/integration_test/test_helper.exs @@ -124,9 +124,6 @@ excludes = [ :selected_as_with_order_by_expression, :selected_as_with_having, - # Distinct with options not supported - :distinct_count, - # SQLite does not support anything except a single column in DISTINCT :multicolumn_distinct, diff --git a/lib/ecto/adapters/sqlite3/connection.ex b/lib/ecto/adapters/sqlite3/connection.ex index c2e27ec..fd6dd67 100644 --- a/lib/ecto/adapters/sqlite3/connection.ex +++ b/lib/ecto/adapters/sqlite3/connection.ex @@ -1437,6 +1437,10 @@ defmodule Ecto.Adapters.SQLite3.Connection do defp expr({:count, _, []}, _sources, _query), do: "count(*)" + defp expr({:count, _, [expr, :distinct]}, sources, query) do + ["count(distinct ", expr(expr, sources, query), ")"] + end + defp expr({:count, _, [{:&, _, [_]}]}, _sources, query) do raise Ecto.QueryError, query: query, diff --git a/test/ecto/adapters/sqlite3/connection/aggregates_test.exs b/test/ecto/adapters/sqlite3/connection/aggregates_test.exs index 2aa1a11..e8daa98 100644 --- a/test/ecto/adapters/sqlite3/connection/aggregates_test.exs +++ b/test/ecto/adapters/sqlite3/connection/aggregates_test.exs @@ -28,13 +28,13 @@ defmodule Ecto.Adapters.SQLite3.Connection.AggregatesTest do end end - test "raises when trying to distinct count" do - assert_raise Ecto.QueryError, fn -> + test "distinct counts" do + query = Schema |> select([r], count(r.x, :distinct)) |> plan() - |> all() - end + + assert ~s{SELECT count(distinct s0."x") FROM "schema" AS s0} == all(query) end test "allows naked count" do