Skip to content

Commit f15e8a8

Browse files
committed
Bring implementation inline with expectations
1 parent 3ebfdf7 commit f15e8a8

1 file changed

Lines changed: 38 additions & 7 deletions

File tree

‎lib/ecto/adapters/sqlite3/connection.ex‎

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,16 @@ defmodule Ecto.Adapters.SQLite3.Connection do
257257
end
258258

259259
@impl true
260-
def insert(prefix, table, header, rows, on_conflict, returning, placeholders, opts \\ [])
260+
def insert(
261+
prefix,
262+
table,
263+
header,
264+
rows,
265+
on_conflict,
266+
returning,
267+
placeholders,
268+
opts \\ []
269+
)
261270

262271
def insert(prefix, table, [], [[]], on_conflict, returning, [], _opts) do
263272
[
@@ -1356,12 +1365,11 @@ defmodule Ecto.Adapters.SQLite3.Connection do
13561365
end
13571366

13581367
defp expr({:fragment, _, parts}, sources, query) do
1359-
parts
1360-
|> Enum.map(fn
1361-
{:raw, part} -> part
1362-
{:expr, expression} -> expr(expression, sources, query)
1363-
end)
1364-
|> parens_for_select
1368+
fragment_expr(parts, sources, query)
1369+
end
1370+
1371+
defp expr({{:fragment, _, parts}, schema}, sources, query) when is_atom(schema) do
1372+
fragment_expr(parts, sources, query)
13651373
end
13661374

13671375
defp expr({:values, _, [types, idx, num_rows]}, _, _query) do
@@ -1583,6 +1591,14 @@ defmodule Ecto.Adapters.SQLite3.Connection do
15831591
end)
15841592
end
15851593

1594+
defp fragment_expr(parts, sources, query) do
1595+
Enum.map(parts, fn
1596+
{:raw, part} -> part
1597+
{:expr, expr} -> maybe_paren(expr, sources, query)
1598+
end)
1599+
|> parens_for_select()
1600+
end
1601+
15861602
def interval(_, "microsecond", _sources) do
15871603
raise ArgumentError,
15881604
"SQLite does not support microsecond precision in datetime intervals"
@@ -1641,6 +1657,9 @@ defmodule Ecto.Adapters.SQLite3.Connection do
16411657
{:fragment, _, _} ->
16421658
{nil, as_prefix ++ [?f | Integer.to_string(pos)], nil}
16431659

1660+
{{:fragment, _, _}, schema, _} ->
1661+
{nil, as_prefix ++ [?f | Integer.to_string(pos)], schema}
1662+
16441663
{:values, _, _} ->
16451664
{nil, as_prefix ++ [?v | Integer.to_string(pos)], nil}
16461665

@@ -1857,6 +1876,18 @@ defmodule Ecto.Adapters.SQLite3.Connection do
18571876
defp reference_on_update(:restrict), do: " ON UPDATE RESTRICT"
18581877
defp reference_on_update(_), do: []
18591878

1879+
defp maybe_paren({op, _, [_, _]} = expr, sources, query) when op in @binary_ops do
1880+
paren_expr(expr, sources, query)
1881+
end
1882+
1883+
defp maybe_paren({:is_nil, _, [_]} = expr, sources, query) do
1884+
paren_expr(expr, sources, query)
1885+
end
1886+
1887+
defp maybe_paren(expr, sources, query) do
1888+
expr(expr, sources, query)
1889+
end
1890+
18601891
defp returning(%{select: nil}, _sources), do: []
18611892

18621893
defp returning(%{select: %{fields: fields}} = query, sources) do

0 commit comments

Comments
 (0)