summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2020-07-28 22:18:08 +0100
committerRobert Newson <rnewson@apache.org>2020-07-29 11:18:16 +0100
commit5a4da506cfb2cd78864f4dfe7320b94d8599f7f7 (patch)
tree7800486e7f1df747a6f6ca06e37cf41e1f1675aa
parent0c7c77eb59d626505cf6ec4162e1053837bc3593 (diff)
downloadcouchdb-prototype/fdb-layer-ebtree-true-clauses.tar.gz
Replace the 'true' clauses in visit with more explicit onesprototype/fdb-layer-ebtree-true-clauses
-rw-r--r--src/ebtree/src/ebtree.erl15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl
index f08e1e9be..228e1df44 100644
--- a/src/ebtree/src/ebtree.erl
+++ b/src/ebtree/src/ebtree.erl
@@ -241,15 +241,16 @@ full_reduce(Db, #tree{} = Tree) ->
reduce(Db, #tree{} = Tree, StartKey, EndKey) ->
Fun = fun
({visit, Key, Value}, {MapAcc, ReduceAcc}) ->
+ BeforeStart = less_than(Tree, Key, StartKey),
AfterEnd = greater_than(Tree, Key, EndKey),
InRange = greater_than_or_equal(Tree, Key, StartKey) andalso less_than_or_equal(Tree, Key, EndKey),
if
+ BeforeStart ->
+ {ok, {MapAcc, ReduceAcc}};
AfterEnd ->
{stop, {MapAcc, ReduceAcc}};
InRange ->
- {ok, {[{Key, Value} | MapAcc], ReduceAcc}};
- true ->
- {ok, {MapAcc, ReduceAcc}}
+ {ok, {[{Key, Value} | MapAcc], ReduceAcc}}
end;
({traverse, FirstKey, LastKey, Reduction}, {MapAcc, ReduceAcc}) ->
BeforeStart = less_than(Tree, LastKey, StartKey),
@@ -322,6 +323,10 @@ group_reduce(Db, #tree{} = Tree, StartKey, EndKey, GroupKeyFun, UserAccFun, User
KeyGroup = GroupKeyFun(Key),
SameGroup = CurrentGroup =:= KeyGroup,
if
+ Dir == fwd andalso BeforeStart ->
+ {ok, {CurrentGroup, UserAcc, MapAcc, ReduceAcc}};
+ Dir == rev andalso AfterEnd ->
+ {ok, {CurrentGroup, UserAcc, MapAcc, ReduceAcc}};
Dir == fwd andalso AfterEnd ->
{stop, {CurrentGroup, UserAcc, MapAcc, ReduceAcc}};
Dir == rev andalso BeforeStart ->
@@ -333,9 +338,7 @@ group_reduce(Db, #tree{} = Tree, StartKey, EndKey, GroupKeyFun, UserAccFun, User
InRange ->
%% implicit end of current group and start of a new one
GroupValue = do_reduce(Tree, MapAcc, ReduceAcc),
- {ok, {KeyGroup, UserAccFun({CurrentGroup, GroupValue}, UserAcc), [{Key, Value}], []}};
- true ->
- {ok, {CurrentGroup, UserAcc, MapAcc, ReduceAcc}}
+ {ok, {KeyGroup, UserAccFun({CurrentGroup, GroupValue}, UserAcc), [{Key, Value}], []}}
end;
({traverse, FirstKey, LastKey, Reduction}, {CurrentGroup, UserAcc, MapAcc, ReduceAcc}) ->
BeforeStart = less_than(Tree, LastKey, StartKey),