anchor.diff:  get(DB={db, _Database}, Key, DefaultValue) ->
     transact(DB, fun(Tx) -> get(Tx, Key, DefaultValue) end);
   get({tx, Tx}, Key, DefaultValue) ->
  -  GetF = fdb_nif:fdb_transaction_get(Tx, tuple:pack(Key)),
  -  {ok, Result} = future_get(GetF, value),
  -  case Result of
  -    not_found -> DefaultValue;
  -    _ -> binary_to_term(Result)
  -  end.
  +  maybe_fdb_do([
  +  fun()-> fdb_nif:fdb_transaction_get(Tx, tuple:pack(Key)) end,
  +  fun(GetF) -> future_get(GetF, value) end,
  +  fun(Result) -> case Result of
  +      not_found -> DefaultValue;
  +      _ -> binary_to_term(Result)
  +   end
  +  end]).
   
   %% @doc Binds a range of data to an iterator; use `fdb:next` to iterate it
   -spec bind(fdb_handle(), #select{}) -> #iterator{}.
  
positive.code: next(Iterator = #iterator{tx = Transaction, iteration = Iteration, select = Select}) ->
    {FstKey, FstIsEq, FstOfs} = fst_gt(Select#select.gt, Select#select.gte),
    {LstKey, LstIsEq, LstOfs} = lst_lt(Select#select.lt, Select#select.lte),
    F = fdb_nif:fdb_transaction_get_range(Transaction, 
      FstKey, FstIsEq, Select#select.offset_begin + FstOfs,
      <<LstKey/binary>>, LstIsEq, Select#select.offset_end + LstOfs,
      Select#select.limit, 
      Select#select.target_bytes, 
      Select#select.streaming_mode, 
      Iteration, 
      Select#select.is_snapshot, 
      Select#select.is_reverse),
    {ok, EncodedData} = future_get(F, keyvalue_array),
    Data = lists:map(fun({X, Y})-> {tuple:unpack(X), binary_to_term(Y)} end, EncodedData),
    Iterator#iterator{ data = Data, iteration = Iteration + 1, out_more = false}.
  
  fst_gt(nil, nil) -> {<<0>>, true, 0};
  fst_gt(nil, Value) -> { tuple:pack(Value), true, 0  };
  
negative.code: init_and_open(SoFile) ->
    init(SoFile),
    api_version(100),
    maybe_fdb_do([
      fun() -> open() end,
      fun(DB) -> DB end
    ]).
  
  %% @doc Gets a value using a key or multiple values using a selector
  %%
  