summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Avdey <eiri@eiri.ca>2017-03-21 16:49:24 -0300
committerJay Doane <jay.s.doane@gmail.com>2017-04-24 11:53:57 -0700
commit9c5dc071084c9fc89b3e242f0b58aef413f9920f (patch)
tree182e22453ce5ac67bd9fd6bef2b0ff0fea410870
parent49fb01d6c3ce74b7f5922b4fd8be99f7bd07101c (diff)
downloadcouchdb-9c5dc071084c9fc89b3e242f0b58aef413f9920f.tar.gz
Fix total_row for _local_docs
-rw-r--r--src/couch_mrview/src/couch_mrview.erl18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl
index c85216d85..037391965 100644
--- a/src/couch_mrview/src/couch_mrview.erl
+++ b/src/couch_mrview/src/couch_mrview.erl
@@ -403,8 +403,7 @@ cleanup(Db) ->
all_docs_fold(Db, #mrargs{keys=undefined}=Args, Callback, UAcc) ->
- {ok, Info} = couch_db:get_db_info(Db),
- Total = couch_util:get_value(doc_count, Info),
+ Total = get_total_rows(Db, Args),
UpdateSeq = couch_db:get_update_seq(Db),
Acc = #mracc{
db=Db,
@@ -421,8 +420,7 @@ all_docs_fold(Db, #mrargs{keys=undefined}=Args, Callback, UAcc) ->
{ok, Offset, FinalAcc} = couch_db:enum_docs(Db, fun map_fold/3, Acc, Opts),
finish_fold(FinalAcc, [{total, Total}, {offset, Offset}]);
all_docs_fold(Db, #mrargs{direction=Dir, keys=Keys0}=Args, Callback, UAcc) ->
- {ok, Info} = couch_db:get_db_info(Db),
- Total = couch_util:get_value(doc_count, Info),
+ Total = get_total_rows(Db, Args),
UpdateSeq = couch_db:get_update_seq(Db),
Acc = #mracc{
db=Db,
@@ -655,6 +653,18 @@ make_meta(Args, UpdateSeq, Base) ->
end.
+get_total_rows(#db{local_tree = LocalTree} = Db, #mrargs{extra = Extra}) ->
+ case couch_util:get_value(namespace, Extra) of
+ <<"_local">> ->
+ FoldFun = fun(_, _, Acc) -> {ok, Acc + 1} end,
+ {ok, _, Total} = couch_btree:foldl(LocalTree, FoldFun, 0),
+ Total;
+ _ ->
+ {ok, Info} = couch_db:get_db_info(Db),
+ couch_util:get_value(doc_count, Info)
+ end.
+
+
default_cb(complete, Acc) ->
{ok, lists:reverse(Acc)};
default_cb({final, Info}, []) ->