summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbenoitc <benoitc@apache.org>2014-01-27 11:51:11 +0100
committerbenoitc <benoitc@apache.org>2014-01-27 11:51:11 +0100
commit8997ab14ebfb9d59fdb31fc3c1923b0ac6651c67 (patch)
tree5ab185e81e6135051e9a88e9eb23617044333f4d
parent08ab524c68b0eea43870afa6ea3bfb1a125a2058 (diff)
downloadcouchdb-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.erl30
-rw-r--r--apps/couch_mrview/src/couch_mrview_util.erl8
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}