Yuriy Zhloba 10 лет назад
Родитель
Сommit
95cb880081
3 измененных файлов с 23 добавлено и 12 удалено
  1. 16 3
      src/epgsql_pool.erl
  2. 6 7
      src/epgsql_pool_app.erl
  3. 1 2
      test/epgsql_pool_SUITE.erl

+ 16 - 3
src/epgsql_pool.erl

@@ -1,6 +1,6 @@
 -module(epgsql_pool).
 
--export([start/3, stop/1,
+-export([start/4, stop/1,
          validate_connection_params/1,
          query/2, query/3, query/4,
          transaction/2
@@ -14,8 +14,19 @@
 
 %% Module API
 
--spec start(pool_name(), integer(), integer()) -> {ok, pid()} | {error, term()}.
-start(PoolName0, InitCount, MaxCount) ->
+-spec start(pool_name(), integer(), integer(), map() | #epgsql_connection_params{}) -> {ok, pid()} | {error, term()}.
+start(PoolName, InitCount, MaxCount, ConnectionParams) when is_map(ConnectionParams) ->
+    Params2 = #epgsql_connection_params{
+                 host = maps:get(host, ConnectionParams),
+                 port = maps:get(port, ConnectionParams),
+                 username = maps:get(username, ConnectionParams),
+                 password = maps:get(password, ConnectionParams),
+                 database = maps:get(database, ConnectionParams)
+                },
+    start(PoolName, InitCount, MaxCount, Params2);
+
+start(PoolName0, InitCount, MaxCount, #epgsql_connection_params{} = ConnectionParams) ->
+    epgsql_pool_settings:set_connection_params(my_pool, ConnectionParams),
     PoolName = epgsql_pool_utils:pool_name_to_atom(PoolName0),
     case epgsql_pool_settings:get_connection_params(PoolName) of
         {ok, _} -> PoolConfig = [{name, PoolName},
@@ -29,6 +40,8 @@ start(PoolName0, InitCount, MaxCount) ->
     end.
 
 
+
+
 -spec stop(pool_name()) -> ok | {error, term()}.
 stop(PoolName) ->
     pooler:rm_pool(epgsql_pool_utils:pool_name_to_atom(PoolName)).

+ 6 - 7
src/epgsql_pool_app.erl

@@ -20,13 +20,12 @@ stop(_State) ->
 -spec test_run() -> ok.
 test_run() ->
     application:ensure_all_started(epgsql_pool),
-    Params = #epgsql_connection_params{host = "localhost",
-                                       port = 5432,
-                                       username = "test",
-                                       password = "test",
-                                       database = "testdb"},
-    epgsql_pool_settings:set_connection_params(my_pool, Params),
-    {ok, _} = epgsql_pool:start(my_pool, 1, 2),
+    Params = #{host => "localhost",
+               port => 5432,
+               username => "test",
+               password => "test",
+               database => "testdb"},
+    {ok, _} = epgsql_pool:start(my_pool, 1, 2, Params),
     Res1 = epgsql_pool:query(my_pool, "select * from category"),
     error_logger:info_msg("~p", [Res1]),
     Res2 = epgsql_pool:query(my_pool, "select * from category where id = $1", [1], [{timeout, 200}]),

+ 1 - 2
test/epgsql_pool_SUITE.erl

@@ -39,8 +39,7 @@ end_per_suite(Config) ->
 
 init_per_testcase(_, Config) ->
     Params = #epgsql_connection_params{host = "localhost", port = 5432, username = "test", password = "test", database = "testdb"},
-    epgsql_pool_settings:set_connection_params(my_pool, Params),
-    {ok, _} = epgsql_pool:start(my_pool, 5, 10),
+    {ok, _} = epgsql_pool:start(my_pool, 5, 10, Params),
     epgsql_pool:query(my_pool, "TRUNCATE TABLE item"),
     epgsql_pool:query(my_pool, "TRUNCATE TABLE category CASCADE"),
     Config.