From 825ac4420691026e1959b7b38c5abfcdfec7045b Mon Sep 17 00:00:00 2001 From: ILYA Khlopotov Date: Tue, 16 Dec 2014 12:42:28 -0800 Subject: [PATCH] Use namespace argument to select correct tree for the enum_docs request COUCHDB-1145 --- src/couch_db.erl | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/couch_db.erl b/src/couch_db.erl index 86b6558b..3f99e627 100644 --- a/src/couch_db.erl +++ b/src/couch_db.erl @@ -1210,12 +1210,27 @@ enum_docs_since(Db, SinceSeq, InFun, Acc, Options) -> [{start_key, SinceSeq + 1} | Options]), {ok, enum_docs_since_reduce_to_count(LastReduction), AccOut}. -enum_docs(Db, InFun, InAcc, Options) -> +enum_docs(Db, InFun, InAcc, Options0) -> + {NS, Options} = extract_namespace(Options0), FoldFun = skip_deleted(InFun), - {ok, LastReduce, OutAcc} = couch_btree:fold( - Db#db.id_tree, FoldFun, InAcc, Options), - {ok, enum_docs_reduce_to_count(LastReduce), OutAcc}. + case NS of + all -> + {ok, LastReduce, OutAcc} = couch_btree:fold( + Db#db.id_tree, FoldFun, InAcc, Options), + {ok, enum_docs_reduce_to_count(LastReduce), OutAcc}; + local -> + {ok, _LastReduce, OutAcc} = couch_btree:fold( + Db#db.local_tree, FoldFun, InAcc, Options), + {ok, 0, OutAcc} + end. +extract_namespace(Options0) -> + case proplists:split(Options0, [namespace]) of + {[[{namespace, NS}]], Options} -> + {NS, Options}; + {_, Options} -> + {all, Options} + end. %%% Internal function %%% open_doc_revs_int(Db, IdRevs, Options) ->