@@ -88,22 +88,22 @@ defmodule Ecto.Adapters.SQL do
88
88
{ kind , conflict_params , _ } = on_conflict , returning , opts ) do
89
89
{ fields , values } = :lists . unzip ( params )
90
90
sql = @ conn . insert ( prefix , source , fields , [ fields ] , on_conflict , returning )
91
- Ecto.Adapters.SQL . struct ( repo , @ conn , sql , values ++ conflict_params , kind , returning , opts )
91
+ Ecto.Adapters.SQL . struct ( repo , @ conn , sql , { :insert , source , [ ] } , values ++ conflict_params , kind , returning , opts )
92
92
end
93
93
94
94
@ doc false
95
- def update ( repo , % { source: { prefix , source } } , fields , filter , returning , opts ) do
95
+ def update ( repo , % { source: { prefix , source } } , fields , params , returning , opts ) do
96
96
{ fields , values1 } = :lists . unzip ( fields )
97
- { filter , values2 } = :lists . unzip ( filter )
97
+ { filter , values2 } = :lists . unzip ( params )
98
98
sql = @ conn . update ( prefix , source , fields , filter , returning )
99
- Ecto.Adapters.SQL . struct ( repo , @ conn , sql , values1 ++ values2 , :raise , returning , opts )
99
+ Ecto.Adapters.SQL . struct ( repo , @ conn , sql , { :update , source , params } , values1 ++ values2 , :raise , returning , opts )
100
100
end
101
101
102
102
@ doc false
103
- def delete ( repo , % { source: { prefix , source } } , filter , opts ) do
104
- { filter , values } = :lists . unzip ( filter )
103
+ def delete ( repo , % { source: { prefix , source } } , params , opts ) do
104
+ { filter , values } = :lists . unzip ( params )
105
105
sql = @ conn . delete ( prefix , source , filter , [ ] )
106
- Ecto.Adapters.SQL . struct ( repo , @ conn , sql , values , :raise , [ ] , opts )
106
+ Ecto.Adapters.SQL . struct ( repo , @ conn , sql , { :delete , source , params } , values , :raise , [ ] , opts )
107
107
end
108
108
109
109
## Transaction
@@ -551,16 +551,17 @@ defmodule Ecto.Adapters.SQL do
551
551
end
552
552
553
553
@ doc false
554
- def struct ( repo , conn , sql , values , on_conflict , returning , opts ) do
554
+ def struct ( repo , conn , sql , { operation , source , params } , values , on_conflict , returning , opts ) do
555
555
case query ( repo , sql , values , fn x -> x end , opts ) do
556
556
{ :ok , % { rows: nil , num_rows: 1 } } ->
557
557
{ :ok , [ ] }
558
558
{ :ok , % { rows: [ values ] , num_rows: 1 } } ->
559
559
{ :ok , Enum . zip ( returning , values ) }
560
560
{ :ok , % { num_rows: 0 } } ->
561
561
if on_conflict == :nothing , do: { :ok , [ ] } , else: { :error , :stale }
562
- { :ok , % { rows: nil , num_rows: num_rows } } when num_rows > 1 ->
563
- raise Ecto.MultipleResultsError , sql_query: sql , count: num_rows
562
+ { :ok , % { num_rows: num_rows } } when num_rows > 1 ->
563
+ raise Ecto.MultiplePrimaryKeyError ,
564
+ source: source , params: params , count: num_rows , operation: operation
564
565
{ :error , err } ->
565
566
case conn . to_constraints ( err ) do
566
567
[ ] -> raise err
0 commit comments