Skip to content

Commit 53c4dde

Browse files
committed
Fix issue ByExpr
closes: #146
1 parent 9e9c046 commit 53c4dde

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

lib/ecto/adapters/sqlite3/connection.ex

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ defmodule Ecto.Adapters.SQLite3.Connection do
99
alias Ecto.Migration.Reference
1010
alias Ecto.Migration.Table
1111
alias Ecto.Query.BooleanExpr
12+
alias Ecto.Query.ByExpr
1213
alias Ecto.Query.JoinExpr
1314
alias Ecto.Query.QueryExpr
1415
alias Ecto.Query.WithExpr
@@ -844,16 +845,16 @@ defmodule Ecto.Adapters.SQLite3.Connection do
844845
def handle_call(fun, _arity), do: {:fun, Atom.to_string(fun)}
845846

846847
defp distinct(nil, _sources, _query), do: []
847-
defp distinct(%QueryExpr{expr: true}, _sources, _query), do: "DISTINCT "
848-
defp distinct(%QueryExpr{expr: false}, _sources, _query), do: []
848+
defp distinct(%ByExpr{expr: true}, _sources, _query), do: "DISTINCT "
849+
defp distinct(%ByExpr{expr: false}, _sources, _query), do: []
849850

850-
defp distinct(%QueryExpr{expr: exprs}, _sources, query) when is_list(exprs) do
851+
defp distinct(%ByExpr{expr: exprs}, _sources, query) when is_list(exprs) do
851852
raise Ecto.QueryError,
852853
query: query,
853854
message: "DISTINCT with multiple columns is not supported by SQLite3"
854855
end
855856

856-
def select(%{select: %{fields: fields}, distinct: distinct} = query, sources) do
857+
defp select(%{select: %{fields: fields}, distinct: distinct} = query, sources) do
857858
[
858859
"SELECT ",
859860
distinct(distinct, sources, query) | select_fields(fields, sources, query)
@@ -1065,8 +1066,8 @@ defmodule Ecto.Adapters.SQLite3.Connection do
10651066
def group_by(%{group_bys: group_bys} = query, sources) do
10661067
[
10671068
" GROUP BY "
1068-
| intersperse_map(group_bys, ", ", fn %QueryExpr{expr: expression} ->
1069-
intersperse_map(expression, ", ", &expr(&1, sources, query))
1069+
| intersperse_map(group_bys, ", ", fn %ByExpr{expr: expression} ->
1070+
intersperse_map(expression, ", ", &top_level_expr(&1, sources, query))
10701071
end)
10711072
]
10721073
end
@@ -1110,7 +1111,7 @@ defmodule Ecto.Adapters.SQLite3.Connection do
11101111
end
11111112

11121113
defp order_by_expr({dir, expression}, sources, query) do
1113-
str = expr(expression, sources, query)
1114+
str = top_level_expr(expression, sources, query)
11141115

11151116
case dir do
11161117
:asc ->
@@ -1219,6 +1220,21 @@ defmodule Ecto.Adapters.SQLite3.Connection do
12191220
[?(, expr(expression, sources, query), ?)]
12201221
end
12211222

1223+
defp top_level_expr(%Ecto.SubQuery{query: query}, sources, parent_query) do
1224+
combinations =
1225+
Enum.map(query.combinations, fn {type, combination_query} ->
1226+
{type, put_in(combination_query.aliases[@parent_as], {parent_query, sources})}
1227+
end)
1228+
1229+
query = put_in(query.combinations, combinations)
1230+
query = put_in(query.aliases[@parent_as], {parent_query, sources})
1231+
[all(query, subquery_as_prefix(sources))]
1232+
end
1233+
1234+
defp top_level_expr(other, sources, parent_query) do
1235+
expr(other, sources, parent_query)
1236+
end
1237+
12221238
##
12231239
## Expression generation
12241240
##

0 commit comments

Comments
 (0)