Current section
18 Versions
Jump to
Current section
18 Versions
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; |