Skip to content

Commit 1609bec

Browse files
committed
enhance distinct error
1 parent 3f86e9b commit 1609bec

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/ecto/adapters/myxql/connection.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ if Code.ensure_loaded?(MyXQL) do
9999
## Query
100100

101101
@parent_as __MODULE__
102-
alias Ecto.Query.{BooleanExpr, ByExpr, JoinExpr, QueryExpr, WithExpr}
102+
alias Ecto.Query.{BooleanExpr, ByExpr, JoinExpr, QueryExpr, SelectExpr, WithExpr}
103103

104104
@impl true
105105
def all(query, as_prefix \\ []) do
@@ -346,6 +346,15 @@ if Code.ensure_loaded?(MyXQL) do
346346
defp distinct(%ByExpr{expr: true}, _sources, _query), do: "DISTINCT "
347347
defp distinct(%ByExpr{expr: false}, _sources, _query), do: []
348348

349+
defp distinct(
350+
%ByExpr{expr: exprs},
351+
_sources,
352+
query = %Ecto.Query{select: %SelectExpr{expr: {:&, [], [0]}}}
353+
)
354+
when is_list(exprs) do
355+
error!(query, "To apply DISTINCT to multiple columns at once, use distinct: true")
356+
end
357+
349358
defp distinct(%ByExpr{expr: exprs}, _sources, query) when is_list(exprs) do
350359
error!(query, "DISTINCT with multiple columns is not supported by MySQL")
351360
end

test/ecto/adapters/myxql_test.exs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,15 @@ defmodule Ecto.Adapters.MyXQLTest do
384384
query = Schema |> distinct(false) |> select([r], {r.x, r.y}) |> plan()
385385
assert all(query) == ~s{SELECT s0.`x`, s0.`y` FROM `schema` AS s0}
386386

387+
assert_raise Ecto.QueryError,
388+
~r"To apply DISTINCT to multiple columns at once, use distinct: true",
389+
fn ->
390+
query =
391+
Schema |> distinct([r], [r.x, r.y]) |> select([r], r) |> plan()
392+
393+
all(query)
394+
end
395+
387396
assert_raise Ecto.QueryError,
388397
~r"DISTINCT with multiple columns is not supported by MySQL",
389398
fn ->

0 commit comments

Comments
 (0)