anchor.diff:  -spec rollback(connection())
       -> ok | {error, Reason :: binary()}.
   rollback(C) ->
  -    gen_server:call(C, rollback, infinity).
  +    case gen_server:call(C, rollback, infinity) of
  +    ok -> {ok, C};
  +    {error, _} ->
  +        {ok, Msg} = gen_server:call(C, get_last_error, infinity),
  +        {error, Msg}
  +    end.
   
   -spec close(efirebirdsql:connection())
       -> ok | {error, Reason :: binary()}.
  
positive.code: execute(C, QueryString) when is_binary(QueryString) ->
      execute(C, QueryString, []);
  execute(C, Params) when is_list(Params) ->
      gen_server:call(C, {execute, Params}, infinity).
  
  -spec execute(connection())
          -> ok | {error, Reason :: binary()}.
  
negative.code: -spec fetchone(connection())
          -> {ok, list()} | {error, Reason :: binary()}.
  fetchone(C) ->
      case gen_server:call(C, fetchone, infinity) of
      ok -> {ok, C};
      {error, _} ->
          {ok, Msg} = gen_server:call(C, get_last_error, infinity),
          {error, Msg}
      end.
  
  -spec fetchall(connection())
          -> {ok, list()} | {error, Reason :: binary()}.
  fetchall(C) ->
      case gen_server:call(C, fetchall, infinity) of
      ok -> {ok, C};
      {error, _} ->
          {ok, Msg} = gen_server:call(C, get_last_error, infinity),
          {error, Msg}
      end.
  
  -spec commit(connection())
      -> ok | {error, Reason :: binary()}.
  