From 9db724334707f10af74f627047737ffcdd913c2d Mon Sep 17 00:00:00 2001 From: Greg Rychlewski Date: Thu, 21 Sep 2023 21:21:14 -0400 Subject: [PATCH] raise when trying to count a source --- lib/ecto/adapters/sqlite3/connection.ex | 6 ++++++ .../adapters/sqlite3/connection/aggregates_test.exs | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/ecto/adapters/sqlite3/connection.ex b/lib/ecto/adapters/sqlite3/connection.ex index b689e9a..b9d457b 100644 --- a/lib/ecto/adapters/sqlite3/connection.ex +++ b/lib/ecto/adapters/sqlite3/connection.ex @@ -1375,6 +1375,12 @@ defmodule Ecto.Adapters.SQLite3.Connection do def expr({:count, _, []}, _sources, _query), do: "count(*)" + def expr({:count, _, [{:&, _, [_]}]}, _sources, query) do + raise Ecto.QueryError, + query: query, + message: "The argument to `count/1` must be a column in SQLite3" + end + def expr({:json_extract_path, _, [expr, path]}, sources, query) do path = Enum.map(path, fn diff --git a/test/ecto/adapters/sqlite3/connection/aggregates_test.exs b/test/ecto/adapters/sqlite3/connection/aggregates_test.exs index 56c7d35..2aa1a11 100644 --- a/test/ecto/adapters/sqlite3/connection/aggregates_test.exs +++ b/test/ecto/adapters/sqlite3/connection/aggregates_test.exs @@ -15,6 +15,19 @@ defmodule Ecto.Adapters.SQLite3.Connection.AggregatesTest do assert ~s{SELECT count(s0."x") FROM "schema" AS s0} == all(query) end + test "raises when counting a source" do + query = + Schema + |> select([r], count(r)) + |> plan() + + msg = ~r"The argument to `count/1` must be a column in SQLite3" + + assert_raise Ecto.QueryError, msg, fn -> + all(query) + end + end + test "raises when trying to distinct count" do assert_raise Ecto.QueryError, fn -> Schema