@@ -80,7 +80,7 @@ start(Config) ->
8080 end ,
8181 pgo_pool :start_link (PoolName , Options2 ).
8282
83- transaction (Pool , Callback ) when is_atom (Pool ) ->
83+ old_transaction (Pool , Callback ) when is_atom (Pool ) ->
8484 F = fun () ->
8585 case Callback (Pool ) of
8686 {ok , T } -> {ok , T };
@@ -95,6 +95,35 @@ transaction(Pool, Callback) when is_atom(Pool) ->
9595 end .
9696
9797
98+ transaction (Pool , Fun ) when is_atom (Pool ) andalso is_function (Fun , 1 ) ->
99+ Exec = fun (Conn , Sql ) ->
100+ pgo_handler :extended_query (Conn , Sql , [], #{queue_time => undefined })
101+ end ,
102+ case pgo :checkout (Pool ) of
103+ {ok , Ref , Conn } ->
104+ try
105+ #{command := 'begin' } = Exec (Conn , " BEGIN" ),
106+ Result = Fun (),
107+ case Exec (Conn , " COMMIT" ) of
108+ #{command := commit } -> Result ;
109+ #{command := rollback } -> Result
110+ end
111+ catch
112+ Type :Reason :Stacktrace ->
113+ Exec (Conn , " ROLLBACK" ),
114+ erlang :raise (Type , Reason , Stacktrace )
115+ after
116+ pgo :checkin (Ref , Conn )
117+ end ;
118+ {error , _ } = Error ->
119+ Error
120+ end ;
121+ % TODO: remove
122+ transaction (A , B ) ->
123+ erlang :display (A ),
124+ erlang :display (B ),
125+ erlang :raise (badarg ).
126+
98127query (Pool , Sql , Arguments , Timeout ) when is_atom (Pool ) ->
99128 Options = #{
100129 pool => Pool ,
0 commit comments