You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by be...@apache.org on 2014/07/13 14:29:44 UTC
[4/7] couch-mrview commit: updated refs/heads/1994-merge-rcouch to
4e0f295
fix: make sure we only get results from last sequence when using a
composite key.
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/commit/91df48a1
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/tree/91df48a1
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/diff/91df48a1
Branch: refs/heads/1994-merge-rcouch
Commit: 91df48a16db0277d5251460af96d2e0311276f33
Parents: 8fea62b
Author: benoitc <bc...@gmail.com>
Authored: Tue Jul 1 22:58:11 2014 +0200
Committer: benoitc <bc...@gmail.com>
Committed: Tue Jul 1 22:58:11 2014 +0200
----------------------------------------------------------------------
src/couch_mrview.erl | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-mrview/blob/91df48a1/src/couch_mrview.erl
----------------------------------------------------------------------
diff --git a/src/couch_mrview.erl b/src/couch_mrview.erl
index 6112cbd..a01d812 100644
--- a/src/couch_mrview.erl
+++ b/src/couch_mrview.erl
@@ -94,7 +94,7 @@ query_view(Db, {Type, View}, Args, Callback, Acc) ->
view_changes_since(Db, DDoc, VName, StartSeq, Fun, Acc) ->
view_changes_since(Db, DDoc, VName, StartSeq, Fun, [], Acc).
-view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) ->
+view_changes_since(Db, DDoc, VName, StartSeq, UserFun, Options, Acc) ->
Args0 = make_view_changes_args(Options),
{ok, {_, View}, _, Args} = couch_mrview_util:get_view(Db, DDoc, VName,
Args0),
@@ -105,9 +105,32 @@ view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) ->
true -> View#mrview.key_byseq_btree;
_ -> View#mrview.seq_btree
end,
- AccOut = lists:foldl(fun(Opts, Acc0) ->
+
+ %% wrap the function to make sure we only return the results
+ %% we want when we get changes for a key.
+ #mrargs{direction=Dir}=Args,
+ EndSeq = case Dir of
+ fwd -> 16#10000000;
+ rev -> 0
+ end,
+
+ WrapperFun = fun
+ ({{Seq, _Key, _DocId}, _Val}=KV, {fwd, LastSeq, Acc2})
+ when Seq > LastSeq, Seq =< EndSeq ->
+ {Go, Acc3} = UserFun(KV, Acc2),
+ {Go, {fwd, Seq, Acc3}};
+ ({Seq, _Key, _DocId}=KV, {D, LastSeq, Acc2})
+ when Seq < LastSeq, Seq >= EndSeq ->
+ {Go, Acc3} = UserFun(KV, Acc2),
+ {Go, {D, Seq, Acc3}};
+ (_, Acc2) ->
+ {ok, Acc2}
+ end,
+
+ {_, _, AccOut} = lists:foldl(fun(Opts, Acc0) ->
+ Acc1 = {Dir, StartSeq, Acc0},
{ok, _R, A} = couch_mrview_util:fold_changes(
- Btree, Fun, Acc0, Opts),
+ Btree, WrapperFun, Acc1, Opts),
A
end, Acc, OptList),
{ok, AccOut};
@@ -116,6 +139,7 @@ view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) ->
end.
+
count_view_changes_since(Db, DDoc, VName, SinceSeq) ->
count_view_changes_since(Db, DDoc, VName, SinceSeq, []).