Current section

18 Versions

Jump to

Compare versions

5 files changed
+26 additions
-11 deletions
  @@ -1,5 +1,5 @@
1 1 {<<"name">>,<<"epgsql">>}.
2 - {<<"version">>,<<"4.0.1">>}.
2 + {<<"version">>,<<"4.1.0">>}.
3 3 {<<"requirements">>,#{}}.
4 4 {<<"app">>,<<"epgsql">>}.
5 5 {<<"precompiled">>,false}.
  @@ -1,5 +1,6 @@
1 1 {erl_opts, [{platform_define, "^[0-9]+", have_maps},
2 - {platform_define, "^(1[89])|^([2-9][0-9])", 'FAST_MAPS'}]}. % Erlang >=18
2 + {platform_define, "^(1[89])|^([2-9][0-9])", 'FAST_MAPS'}, % Erlang >=18
3 + {platform_define, "^(R|1|20)", 'FUN_STACKTRACE'}]}. % Erlang < 21
3 4
4 5 {eunit_opts, [verbose]}.
  @@ -24,7 +24,14 @@ names() ->
24 24 encode(C, _, _) when is_integer(C), C =< 255 ->
25 25 <<C:1/big-unsigned-unit:8>>;
26 26 encode(Bin, bpchar, _) when is_binary(Bin) ->
27 - Bin.
27 + Bin;
28 + encode(Str, bpchar, _) when is_list(Str) ->
29 + %% See epgsql_codec_text:encode/3
30 + try iolist_size(Str) of
31 + _ -> Str
32 + catch error:badarg ->
33 + unicode:characters_to_binary(Str)
34 + end.
28 35
29 36 decode(<<C:1/big-unsigned-unit:8>>, _, _) -> C;
30 37 decode(Bin, bpchar, _) -> Bin.
  @@ -1,6 +1,6 @@
1 1 {application,epgsql,
2 2 [{description,"PostgreSQL Client"},
3 - {vsn,"4.0.1"},
3 + {vsn,"4.1.0"},
4 4 {modules,[]},
5 5 {registered,[]},
6 6 {applications,[kernel,stdlib,ssl]},
  @@ -111,6 +111,13 @@
111 111 -type lsn() :: integer().
112 112 -type cb_state() :: term().
113 113
114 + %% See https://github.com/erlang/rebar3/pull/1773
115 + -ifdef(FUN_STACKTRACE).
116 + -define(WITH_STACKTRACE(T, R, S), T:R -> S = erlang:get_stacktrace(), ).
117 + -else.
118 + -define(WITH_STACKTRACE(T, R, S), T:R:S ->).
119 + -endif.
120 +
114 121 %% -- behaviour callbacks --
115 122
116 123 %% Handles a XLogData Message (StartLSN, EndLSN, WALRecord, CbState).
  @@ -379,16 +386,16 @@ with_transaction(C, F, Opts0) ->
379 386 end,
380 387 R
381 388 catch
382 - Type:Reason ->
389 + ?WITH_STACKTRACE(Type, Reason, Stack)
383 390 squery(C, "ROLLBACK"),
384 - handle_error(Type, Reason, proplists:get_value(reraise, Opts, true))
391 + case proplists:get_value(reraise, Opts, true) of
392 + true ->
393 + erlang:raise(Type, Reason, Stack);
394 + false ->
395 + {rollback, Reason}
396 + end
385 397 end.
386 398
387 - handle_error(_, Reason, false) ->
388 - {rollback, Reason};
389 - handle_error(Type, Reason, true) ->
390 - erlang:raise(Type, Reason, erlang:get_stacktrace()).
391 -
392 399 sync_on_error(C, Error = {error, _}) ->
393 400 ok = sync(C),
394 401 Error;