From 34b12e7537d8bc020023c15bde9789d3bf29e8e1 Mon Sep 17 00:00:00 2001 From: "Damien F. Katz" Date: Tue, 29 Jul 2008 18:23:42 +0000 Subject: Fix for problem with count query arg in grouped reduce views. Previous fix would keep enumerating over subsequent view results despite not returning them. git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@680796 13f79535-47bb-0310-9956-ffa450edef68 --- src/couchdb/couch_btree.erl | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/couchdb/couch_btree.erl') diff --git a/src/couchdb/couch_btree.erl b/src/couchdb/couch_btree.erl index ac19b4e9..563e6040 100644 --- a/src/couchdb/couch_btree.erl +++ b/src/couchdb/couch_btree.erl @@ -78,17 +78,20 @@ fold_reduce(#btree{root=Root}=Bt, Dir, StartKey, EndKey, KeyGroupFun, Fun, Acc) rev -> {EndKey, StartKey}; fwd -> {StartKey, EndKey} end, - {ok, Acc2, GroupedRedsAcc2, GroupedKVsAcc2, GroupedKey2} = - reduce_stream_node(Bt, Dir, Root, StartKey2, EndKey2, nil, [], [], - KeyGroupFun, Fun, Acc), - if GroupedKey2 == nil -> - {ok, Acc2}; - true -> - case (catch Fun(GroupedKey2, {GroupedKVsAcc2, GroupedRedsAcc2}, Acc2)) of + try + {ok, Acc2, GroupedRedsAcc2, GroupedKVsAcc2, GroupedKey2} = + reduce_stream_node(Bt, Dir, Root, StartKey2, EndKey2, nil, [], [], + KeyGroupFun, Fun, Acc), + if GroupedKey2 == nil -> + {ok, Acc2}; + true -> + case Fun(GroupedKey2, {GroupedKVsAcc2, GroupedRedsAcc2}, Acc2) of {ok, Acc3} -> {ok, Acc3}; - {stop, Acc3} -> {ok, Acc3}; - Else -> throw(Else) + {stop, Acc3} -> {ok, Acc3} + end end + catch + throw:{stop, AccDone} -> {ok, AccDone} end. full_reduce(#btree{root=nil,reduce=Reduce}) -> -- cgit v1.2.3