diff options
author | Randall Leeds <randall@apache.org> | 2011-07-30 00:37:32 +0000 |
---|---|---|
committer | Randall Leeds <randall@apache.org> | 2011-07-30 00:37:32 +0000 |
commit | 2a92b4b41f261a8ddca496d729a39bbd20c41320 (patch) | |
tree | aed9f2696ce665d9a2ae4ec38f06ab9758c87738 /src/couchdb/couch_view.erl | |
parent | daa640b113907bb28fc9b26e38849f239d353363 (diff) |
Backport of r1152398 from trunk
Fix COUCHDB-1076 - views skip empty btree branches
git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1152406 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_view.erl')
-rw-r--r-- | src/couchdb/couch_view.erl | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/couchdb/couch_view.erl b/src/couchdb/couch_view.erl index c9a9b2cc..88cadec7 100644 --- a/src/couchdb/couch_view.erl +++ b/src/couchdb/couch_view.erl @@ -252,8 +252,16 @@ fold_fun(Fun, [KV|Rest], {KVReds, Reds}, Acc) -> fold(#view{btree=Btree}, Fun, Acc, Options) -> WrapperFun = - fun(KV, Reds, Acc2) -> - fold_fun(Fun, expand_dups([KV],[]), Reds, Acc2) + fun(visit, KV, Reds, Acc2) -> + fold_fun(Fun, expand_dups([KV],[]), Reds, Acc2); + (traverse, LK, Red, Acc2) + when is_function(Fun, 4) -> + Fun(traverse, LK, Red, Acc2); + (traverse, _LK, Red, {_, Skip, _, _} = Acc2) + when Skip >= element(1, Red) -> + {skip, setelement(2, Acc2, Skip - element(1, Red))}; + (traverse, _, _, Acc2) -> + {ok, Acc2} end, {ok, _LastReduce, _AccResult} = couch_btree:fold(Btree, WrapperFun, Acc, Options). |