diff options
author | benoitc <benoitc@apache.org> | 2014-01-27 11:51:11 +0100 |
---|---|---|
committer | benoitc <benoitc@apache.org> | 2014-01-27 11:51:11 +0100 |
commit | 8997ab14ebfb9d59fdb31fc3c1923b0ac6651c67 (patch) | |
tree | 5ab185e81e6135051e9a88e9eb23617044333f4d | |
parent | 08ab524c68b0eea43870afa6ea3bfb1a125a2058 (diff) | |
download | couchdb-8997ab14ebfb9d59fdb31fc3c1923b0ac6651c67.tar.gz |
couch_mrview: add couch_mrview:count_view_changes_since/{4,5}
Add function to couch changes in a view index, similar to
couch_db:count_changes_since/2 .
-rw-r--r-- | apps/couch_mrview/src/couch_mrview.erl | 30 | ||||
-rw-r--r-- | apps/couch_mrview/src/couch_mrview_util.erl | 8 |
2 files changed, 36 insertions, 2 deletions
diff --git a/apps/couch_mrview/src/couch_mrview.erl b/apps/couch_mrview/src/couch_mrview.erl index eb929a6d5..d8f092c60 100644 --- a/apps/couch_mrview/src/couch_mrview.erl +++ b/apps/couch_mrview/src/couch_mrview.erl @@ -15,6 +15,7 @@ -export([query_all_docs/2, query_all_docs/4]). -export([query_view/3, query_view/4, query_view/6]). -export([view_changes_since/6, view_changes_since/7]). +-export([count_view_changes_since/4, count_view_changes_since/5]). -export([get_info/2]). -export([compact/2, compact/3, cancel_compaction/2]). -export([cleanup/1]). @@ -111,6 +112,35 @@ view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) -> {error, seqs_not_indexed} end. + +count_view_changes_since(Db, DDoc, VName, SinceSeq) -> + count_view_changes_since(Db, DDoc, VName, SinceSeq, []). + +count_view_changes_since(Db, DDoc, VName, SinceSeq, Options) -> + Args0 = make_view_changes_args(Options), + {ok, {_, View}, _, Args} = couch_mrview_util:get_view(Db, DDoc, VName, + Args0), + case View#mrview.seq_indexed of + true -> + OptList = make_view_changes_opts(SinceSeq, Options, Args), + Btree = case is_key_byseq(Options) of + true -> View#mrview.key_byseq_btree; + _ -> View#mrview.seq_btree + end, + lists:foldl(fun(Opts, Acc0) -> + {ok, N} = couch_btree:fold_reduce( + Btree, fun(_SeqStart, PartialReds, 0) -> + {ok, couch_btree:final_reduce( + Btree, PartialReds)} + end, + 0, Opts), + Acc0 + N + end, 0, OptList); + _ -> + {error, seqs_not_indexed} + end. + + get_info(Db, DDoc) -> {ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc), couch_index:get_info(Pid). diff --git a/apps/couch_mrview/src/couch_mrview_util.erl b/apps/couch_mrview/src/couch_mrview_util.erl index 673265a3d..8cb4fae8b 100644 --- a/apps/couch_mrview/src/couch_mrview_util.erl +++ b/apps/couch_mrview/src/couch_mrview_util.erl @@ -236,7 +236,6 @@ less_json_seqs({SeqA, JsonA}, {SeqB, JsonB}) -> Result < 0 end. - open_view(Db, Fd, Lang, {BTState, SeqBTState, KSeqBTState, USeq, PSeq}, View) -> FunSrcs = [FunSrc || {_Name, FunSrc} <- View#mrview.reduce_funs], ReduceFun = @@ -265,10 +264,15 @@ open_view(Db, Fd, Lang, {BTState, SeqBTState, KSeqBTState, USeq, PSeq}, View) -> {SeqBtree, KeyBySeqBtree} = case View#mrview.seq_indexed of true -> + BySeqReduceFun = fun couch_db_updater:btree_by_seq_reduce/2, ViewSeqBtOpts = [{less, fun less_json_seqs/2}, + {reduce, BySeqReduceFun}, {compression, couch_db:compression(Db)}], + KeyBySeqBtOpts = [{less, Less}, + {reduce, BySeqReduceFun}, + {compression, couch_db:compression(Db)}], {ok, SBt} = couch_btree:open(SeqBTState, Fd, ViewSeqBtOpts), - {ok, KSBt} = couch_btree:open(KSeqBTState, Fd, ViewBtOpts), + {ok, KSBt} = couch_btree:open(KSeqBTState, Fd, KeyBySeqBtOpts), {SBt, KSBt}; false -> {nil, nil} |