Browse Source

Merge pull request #221 from onno-vos-dev/query-response-type-include-socket-errors

Response types for epgsql:equery/[2-4] and epgsql:squery/2 can include socket errors
Sergey Prokhorov 5 years ago
parent
commit
bbdf62b3e5
2 changed files with 6 additions and 4 deletions
  1. 3 3
      src/epgsql.erl
  2. 3 1
      src/epgsql_sock.erl

+ 3 - 3
src/epgsql.erl

@@ -231,7 +231,7 @@ set_notice_receiver(C, PidOrName) ->
 get_cmd_status(C) ->
     epgsql_sock:get_cmd_status(C).
 
--spec squery(connection(), sql_query()) -> epgsql_cmd_squery:response().
+-spec squery(connection(), sql_query()) -> epgsql_cmd_squery:response() | epgsql_sock:error().
 %% @doc runs simple `SqlQuery' via given `Connection'
 %% @see epgsql_cmd_squery
 squery(Connection, SqlQuery) ->
@@ -241,7 +241,7 @@ equery(C, Sql) ->
     equery(C, Sql, []).
 
 -spec equery(connection(), sql_query(), [bind_param()]) ->
-                    epgsql_cmd_equery:response().
+                    epgsql_cmd_equery:response() | epgsql_sock:error().
 equery(C, Sql, Parameters) ->
     equery(C, "", Sql, Parameters).
 
@@ -251,7 +251,7 @@ equery(C, Sql, Parameters) ->
 %% @end
 %% TODO add fast_equery command that doesn't need parsed statement
 -spec equery(connection(), string(), sql_query(), [bind_param()]) ->
-                    epgsql_cmd_equery:response().
+                    epgsql_cmd_equery:response() | epgsql_sock:error().
 equery(C, Name, Sql, Parameters) ->
     case parse(C, Name, Sql, []) of
         {ok, #statement{types = Types} = S} ->

+ 3 - 1
src/epgsql_sock.erl

@@ -60,7 +60,7 @@
          get_parameter_internal/2,
          get_replication_state/1, set_packet_handler/2]).
 
--export_type([transport/0, pg_sock/0]).
+-export_type([transport/0, pg_sock/0, error/0]).
 
 -include("epgsql.hrl").
 -include("protocol.hrl").
@@ -73,6 +73,8 @@
 -type tcp_socket() :: port(). %gen_tcp:socket() isn't exported prior to erl 18
 -type repl_state() :: #repl{}.
 
+-type error() :: {error, sync_required | closed | sock_closed | sock_error}.
+
 -record(state, {mod :: gen_tcp | ssl | undefined,
                 sock :: tcp_socket() | ssl:sslsocket() | undefined,
                 data = <<>>,