diff options
author | Eric Avdey <eiri@eiri.ca> | 2017-03-21 16:49:24 -0300 |
---|---|---|
committer | Jay Doane <jay.s.doane@gmail.com> | 2017-04-24 11:53:57 -0700 |
commit | 9c5dc071084c9fc89b3e242f0b58aef413f9920f (patch) | |
tree | 182e22453ce5ac67bd9fd6bef2b0ff0fea410870 | |
parent | 49fb01d6c3ce74b7f5922b4fd8be99f7bd07101c (diff) | |
download | couchdb-9c5dc071084c9fc89b3e242f0b58aef413f9920f.tar.gz |
Fix total_row for _local_docs
-rw-r--r-- | src/couch_mrview/src/couch_mrview.erl | 18 |
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}, []) -> |