Consistent support for merge ops #4
@ -1489,11 +1489,7 @@ open_db_(MP, Alias, Opts, CFs0, CreateIfMissing) ->
|
||||
%% not yet created
|
||||
CFs = cfs(CFs0),
|
||||
file:make_dir(MP),
|
||||
OpenOpts = [ {create_if_missing, true}
|
||||
, {create_missing_column_families, true}
|
||||
, {merge_operator, erlang_merge_operator}
|
||||
| Opts ],
|
||||
OpenRes = mnesia_rocksdb_lib:open_rocksdb(MP, OpenOpts, CFs),
|
||||
OpenRes = rocksdb_open(MP, Opts, CFs),
|
||||
map_cfs(OpenRes, CFs, Alias, Acc0);
|
||||
false ->
|
||||
{error, enoent};
|
||||
@ -1504,9 +1500,15 @@ open_db_(MP, Alias, Opts, CFs0, CreateIfMissing) ->
|
||||
map_cfs(rocksdb_open(MP, Opts, CFs1), CFs1, Alias, Acc0)
|
||||
end.
|
||||
|
||||
open_opts(Opts) ->
|
||||
[ {create_if_missing, true}
|
||||
, {create_missing_column_families, true}
|
||||
, {merge_operator, erlang_merge_operator}
|
||||
| Opts ].
|
||||
|
||||
rocksdb_open(MP, Opts, CFs) ->
|
||||
%% rocksdb:open(MP, Opts, CFs),
|
||||
mnesia_rocksdb_lib:open_rocksdb(MP, Opts, CFs).
|
||||
mnesia_rocksdb_lib:open_rocksdb(MP, open_opts(Opts), CFs).
|
||||
|
||||
is_open(Alias, #st{backends = Bs}) ->
|
||||
case maps:find(Alias, Bs) of
|
||||
|
16
src/mrdb.erl
16
src/mrdb.erl
@ -53,6 +53,7 @@
|
||||
, delete/2 , delete/3
|
||||
, delete_object/2, delete_object/3
|
||||
, match_delete/2
|
||||
, merge/3 , merge/4
|
||||
, clear_table/1
|
||||
, batch_write/2 , batch_write/3
|
||||
, update_counter/3, update_counter/4
|
||||
@ -740,6 +741,21 @@ insert(Tab, Obj0, Opts) ->
|
||||
EncVal = encode_val(Obj, Ref),
|
||||
insert_(Ref, Key, encode_key(Key, Ref), EncVal, Obj, Opts).
|
||||
|
||||
merge(Tab, Key, MergeOp) ->
|
||||
merge(Tab, Key, MergeOp, []).
|
||||
|
||||
merge(Tab, Key, MergeOp, Opts) ->
|
||||
#{encoding := Enc} = Ref = ensure_ref(Tab),
|
||||
case Enc of
|
||||
{_, {value, term}} ->
|
||||
merge_(Ref, Key, MergeOp, Opts);
|
||||
_ ->
|
||||
abort(badarg)
|
||||
end.
|
||||
|
||||
merge_(Ref, Key, MergeOp, Opts) ->
|
||||
rdb_merge(Ref, encode_key(Key), MergeOp, Opts).
|
||||
|
||||
validate_obj(Obj, #{mode := mnesia}) ->
|
||||
Obj;
|
||||
validate_obj(Obj, #{attr_pos := AP,
|
||||
|
Loading…
x
Reference in New Issue
Block a user