Browse Source

Merge pull request #176 from seriyps/fix-connect-proplist

Fix connect proplist
Sergey Prokhorov 6 years ago
parent
commit
fea8f39a4d
4 changed files with 26 additions and 7 deletions
  1. 5 3
      src/epgsql.erl
  2. 2 2
      src/epgsqla.erl
  3. 1 1
      src/epgsqli.erl
  4. 18 1
      test/epgsql_SUITE.erl

+ 5 - 3
src/epgsql.erl

@@ -150,19 +150,21 @@ connect(Host, Username, Password, Opts) ->
 -spec connect(connection(), host(), string(), string(), connect_opts())
 -spec connect(connection(), host(), string(), string(), connect_opts())
         -> {ok, Connection :: connection()} | {error, Reason :: connect_error()}.
         -> {ok, Connection :: connection()} | {error, Reason :: connect_error()}.
 connect(C, Host, Username, Password, Opts) ->
 connect(C, Host, Username, Password, Opts) ->
-    Opts1 = maps:merge(epgsql:to_map(Opts),
+    Opts1 = maps:merge(to_map(Opts),
                        #{host => Host,
                        #{host => Host,
                          username => Username,
                          username => Username,
                          password => Password}),
                          password => Password}),
     call_connect(C, Opts1).
     call_connect(C, Opts1).
 
 
+-spec call_connect(connection(), connect_opts())
+       -> {ok, Connection :: connection()} | {error, Reason :: connect_error()}.
 call_connect(C, Opts) ->
 call_connect(C, Opts) ->
-    Opts1 = epgsql_cmd_connect:opts_hide_password(Opts),
+    Opts1 = epgsql_cmd_connect:opts_hide_password(to_map(Opts)),
     case epgsql_sock:sync_command(
     case epgsql_sock:sync_command(
            C, epgsql_cmd_connect, Opts1) of
            C, epgsql_cmd_connect, Opts1) of
         connected ->
         connected ->
             %% If following call fails for you, try to add {codecs, []} connect option
             %% If following call fails for you, try to add {codecs, []} connect option
-            {ok, _} = maybe_update_typecache(C, Opts),
+            {ok, _} = maybe_update_typecache(C, Opts1),
             {ok, C};
             {ok, C};
         Error = {error, _} ->
         Error = {error, _} ->
             Error
             Error

+ 2 - 2
src/epgsqla.erl

@@ -52,8 +52,8 @@ connect(C, Host, Username, Password, Opts) ->
     call_connect(C, Opts1).
     call_connect(C, Opts1).
 
 
 -spec call_connect(epgsql:connection(), epgsql:connect_opts()) -> reference().
 -spec call_connect(epgsql:connection(), epgsql:connect_opts()) -> reference().
-call_connect(C, Opts) when is_map(Opts) ->
-    Opts1 = epgsql_cmd_connect:opts_hide_password(Opts),
+call_connect(C, Opts) ->
+    Opts1 = epgsql_cmd_connect:opts_hide_password(epgsql:to_map(Opts)),
     complete_connect(
     complete_connect(
       C, cast(C, epgsql_cmd_connect, Opts1), Opts1).
       C, cast(C, epgsql_cmd_connect, Opts1), Opts1).
 
 

+ 1 - 1
src/epgsqli.erl

@@ -51,7 +51,7 @@ connect(C, Host, Username, Password, Opts) ->
     call_connect(C, Opts1).
     call_connect(C, Opts1).
 
 
 call_connect(C, Opts) ->
 call_connect(C, Opts) ->
-    Opts1 = epgsql_cmd_connect:opts_hide_password(Opts),
+    Opts1 = epgsql_cmd_connect:opts_hide_password(epgsql:to_map(Opts)),
     epgsqla:complete_connect(
     epgsqla:complete_connect(
       C, incremental(C, epgsql_cmd_connect, Opts1), Opts1).
       C, incremental(C, epgsql_cmd_connect, Opts1), Opts1).
 
 

+ 18 - 1
test/epgsql_SUITE.erl

@@ -44,7 +44,8 @@ groups() ->
             connect_with_ssl,
             connect_with_ssl,
             connect_with_client_cert,
             connect_with_client_cert,
             connect_to_closed_port,
             connect_to_closed_port,
-            connect_map
+            connect_map,
+            connect_proplist
         ]},
         ]},
         {types, [parallel], [
         {types, [parallel], [
             numeric_type,
             numeric_type,
@@ -273,6 +274,22 @@ connect_map(Config) ->
     epgsql_ct:flush(),
     epgsql_ct:flush(),
     ok.
     ok.
 
 
+connect_proplist(Config) ->
+    {Host, Port} = epgsql_ct:connection_data(Config),
+    Module = ?config(module, Config),
+
+    Opts = [
+        {host, Host},
+        {port, Port},
+        {database, "epgsql_test_db1"},
+        {username, "epgsql_test_md5"},
+        {password, "epgsql_test_md5"}
+    ],
+    {ok, C} = Module:connect(Opts),
+    Module:close(C),
+    epgsql_ct:flush(),
+    ok.
+
 connect_to_closed_port(Config) ->
 connect_to_closed_port(Config) ->
     {Host, Port} = epgsql_ct:connection_data(Config),
     {Host, Port} = epgsql_ct:connection_data(Config),
     Module = ?config(module, Config),
     Module = ?config(module, Config),