99-module (pgapp ).
1010
1111% % API
12- -export ([connect /1 , connect /2 , equery /2 , equery /3 , squery /1 , squery /2 ]).
12+ -export ([connect /1 , connect /2 ,
13+ equery /2 , equery /3 , equery /4 ,
14+ squery /1 , squery /2 , squery /3 ,
15+ with_transaction /1 , with_transaction /2 , with_transaction /3 ]).
1316
1417% %%===================================================================
1518% %% API
@@ -19,40 +22,72 @@ connect(Settings) ->
1922 connect (epgsql_pool , Settings ).
2023
2124connect (PoolName , Settings ) ->
22- PoolSize = proplists :get_value (size , Settings , 5 ),
25+ PoolSize = proplists :get_value (size , Settings , 5 ),
2326 MaxOverflow = proplists :get_value (max_overflow , Settings , 5 ),
24- pgapp_sup :add_pool (PoolName ,
25- [{name , {local , PoolName }},
26- {worker_module , pgapp_worker },
27- {size , PoolSize },
28- {max_overflow , MaxOverflow }],
29- Settings ).
30-
31- -spec equery (Sql :: epgsql :sql_query (),
32- Params :: list (epgsql :bind_param ())) -> epgsql :reply (epgsql :equery_row ()).
27+ pgapp_sup :add_pool (PoolName , [{name , {local , PoolName }},
28+ {worker_module , pgapp_worker },
29+ {size , PoolSize },
30+ {max_overflow , MaxOverflow }], Settings ).
31+
32+ -spec equery (Sql :: epgsql :sql_query (),
33+ Params :: list (epgsql :bind_param ()))
34+ -> epgsql :reply (epgsql :equery_row ()).
3335equery (Sql , Params ) ->
34- equery (epgsql_pool , Sql , Params ).
35-
36- -spec equery (PoolName :: atom (), Sql :: epgsql :sql_query (),
37- Params :: list (epgsql :bind_param ())) -> epgsql :reply (epgsql :equery_row ()).
38- equery (PoolName , Sql , Params ) ->
39- poolboy :transaction (PoolName ,
40- fun (Worker ) ->
41- gen_server :call (Worker , {equery , Sql , Params })
42- end ).
43-
44- -spec squery (Sql :: epgsql :sql_query ()) -> epgsql :reply (epgsql :squery_row ()) |
45- [epgsql :reply (epgsql :squery_row ())].
36+ pgapp_worker :equery (Sql , Params ).
37+
38+ -spec equery (Sql :: epgsql :sql_query (),
39+ Params :: list (epgsql :bind_param ()),
40+ Timeout :: atom () | integer ())
41+ -> epgsql :reply (epgsql :equery_row ()).
42+ equery (Sql , Params , Timeout ) ->
43+ pgapp_worker :equery (Sql , Params , Timeout ).
44+
45+
46+ -spec equery (PoolName :: atom (), Sql :: epgsql :sql_query (),
47+ Params :: list (epgsql :bind_param ()),
48+ Timeout :: atom () | integer ())
49+ -> epgsql :reply (epgsql :equery_row ()).
50+ equery (PoolName , Sql , Params , Timeout ) ->
51+ pgapp_worker :equery (PoolName , Sql , Params , Timeout ).
52+
53+ -spec squery (Sql :: epgsql :sql_query ())
54+ -> epgsql :reply (epgsql :squery_row ()) |
55+ [epgsql :reply (epgsql :squery_row ())].
4656squery (Sql ) ->
47- squery (epgsql_pool , Sql ).
48-
49- -spec squery (PoolName :: atom (), Sql :: epgsql :sql_query ()) -> epgsql :reply (epgsql :squery_row ()) |
50- [epgsql :reply (epgsql :squery_row ())].
51- squery (PoolName , Sql ) ->
52- poolboy :transaction (PoolName ,
53- fun (Worker ) ->
54- gen_server :call (Worker , {squery , Sql })
55- end ).
57+ pgapp_worker :squery (Sql ).
58+
59+ -spec squery (Sql :: epgsql :sql_query (),
60+ Timeout :: atom () | integer ())
61+ -> epgsql :reply (epgsql :squery_row ()) |
62+ [epgsql :reply (epgsql :squery_row ())].
63+ squery (Sql , Timeout ) ->
64+ pgapp_worker :squery (Sql , Timeout ).
65+
66+ -spec squery (PoolName :: atom (),
67+ Sql :: epgsql :sql_query (),
68+ Timeout :: atom () | integer ())
69+ -> epgsql :reply (epgsql :squery_row ()) |
70+ [epgsql :reply (epgsql :squery_row ())].
71+ squery (PoolName , Sql , Timeout ) ->
72+ pgapp_worker :squery (PoolName , Sql , Timeout ).
73+
74+ -spec with_transaction (Function :: fun (() -> Reply ))
75+ -> Reply | {rollback , any ()} when Reply :: any ().
76+ with_transaction (Fun ) when is_function (Fun , 0 ) ->
77+ with_transaction (epgsql_pool , Fun ).
78+
79+ -spec with_transaction (PoolName :: atom (),
80+ Function :: fun (() -> Reply ))
81+ -> Reply | {rollback , any ()} when Reply :: any ().
82+ with_transaction (PoolName , Fun ) when is_function (Fun , 0 ) ->
83+ pgapp_worker :with_transaction (PoolName , Fun ).
84+
85+ -spec with_transaction (PoolName :: atom (),
86+ Function :: fun (() -> Reply ),
87+ Timeout :: atom () | non_neg_integer ())
88+ -> Reply | {rollback , any ()} when Reply :: any ().
89+ with_transaction (PoolName , Fun , Timeout ) when is_function (Fun , 0 ) ->
90+ pgapp_worker :with_transaction (PoolName , Fun , Timeout ).
5691
5792% %--------------------------------------------------------------------
5893% % @doc
0 commit comments