diff options
author | Richard Carlsson <[email protected]> | 2016-11-09 16:15:29 +0100 |
---|---|---|
committer | Richard Carlsson <[email protected]> | 2016-11-11 14:42:04 +0100 |
commit | 98dc4f8c225982cca0bc1fd221167ee9f4031547 (patch) | |
tree | 44de2cafa4df915f3a95b3edd6b4028cb06f3c6d | |
parent | 99bb976389c8971b755f103a67143815a6b3e388 (diff) | |
download | otp-98dc4f8c225982cca0bc1fd221167ee9f4031547.tar.gz otp-98dc4f8c225982cca0bc1fd221167ee9f4031547.tar.bz2 otp-98dc4f8c225982cca0bc1fd221167ee9f4031547.zip |
Don't wrap continuations from mnesia_ext backends
Continuations returned from mnesia_ext backends were originally wrapped with
the backend module, but that was a remnant of the earliest implementation,
and is not actually needed, since Mnesia already knows what the table
storage type is when it applies the continuation. When mnesia_ext was ported
to OTP 19, the wrapper got changed to use the table type alias instead of
the module, which triggered an error in the mnesia_eleveldb backend. This
patch removes the wrapping completely.
-rw-r--r-- | lib/mnesia/src/mnesia_lib.erl | 16 | ||||
-rw-r--r-- | lib/mnesia/test/ext_test.erl | 4 |
2 files changed, 5 insertions, 15 deletions
diff --git a/lib/mnesia/src/mnesia_lib.erl b/lib/mnesia/src/mnesia_lib.erl index 10e232c800..1fdc656600 100644 --- a/lib/mnesia/src/mnesia_lib.erl +++ b/lib/mnesia/src/mnesia_lib.erl @@ -1192,25 +1192,15 @@ db_select(Storage, Tab, Pat) -> end. db_select_init({ext, Alias, Mod}, Tab, Pat, Limit) -> - case Mod:select(Alias, Tab, Pat, Limit) of - {Matches, Continuation} when is_list(Matches) -> - {Matches, {Alias, Continuation}}; - R -> - R - end; + Mod:select(Alias, Tab, Pat, Limit); db_select_init(disc_only_copies, Tab, Pat, Limit) -> dets:select(Tab, Pat, Limit); db_select_init(_, Tab, Pat, Limit) -> ets:select(Tab, Pat, Limit). -db_select_cont({ext, Alias, Mod}, Cont0, Ms) -> +db_select_cont({ext, _Alias, Mod}, Cont0, Ms) -> Cont = Mod:repair_continuation(Cont0, Ms), - case Mod:select(Cont) of - {Matches, Continuation} when is_list(Matches) -> - {Matches, {Alias, Continuation}}; - R -> - R - end; + Mod:select(Cont); db_select_cont(disc_only_copies, Cont0, Ms) -> Cont = dets:repair_continuation(Cont0, Ms), dets:select(Cont); diff --git a/lib/mnesia/test/ext_test.erl b/lib/mnesia/test/ext_test.erl index 45ddb148bc..b7904c95ac 100644 --- a/lib/mnesia/test/ext_test.erl +++ b/lib/mnesia/test/ext_test.erl @@ -233,5 +233,5 @@ select_1({Acc, C}) -> select(ext_ets, Tab, Ms, Limit) when is_integer(Limit); Limit =:= infinity -> ets:select(mnesia_lib:val({?MODULE,Tab}), Ms, Limit). -repair_continuation({Alias, Cont}, Ms) -> - {Alias, ets:repair_continuation(Cont, Ms)}. +repair_continuation(Cont, Ms) -> + ets:repair_continuation(Cont, Ms). |