@@ -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