summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2011-01-28 17:52:43 +0000
committerRobert Newson <rnewson@apache.org>2011-01-28 17:52:43 +0000
commite9fa396941f2738f9ba10a4521f0415b2c612f1c (patch)
treed2e3b4d3e175f29b114697e8f3618d16e06db96b
parenta666c0a3ea2fe0b65e8fb9b5034c8d9a64f5a905 (diff)
COUCHDB-1047 - support inclusive_end with reduce calls
git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1064801 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--share/www/script/test/reduce.js15
-rw-r--r--src/couchdb/couch_btree.erl5
2 files changed, 19 insertions, 1 deletions
diff --git a/share/www/script/test/reduce.js b/share/www/script/test/reduce.js
index 979a0292..16c7a7bf 100644
--- a/share/www/script/test/reduce.js
+++ b/share/www/script/test/reduce.js
@@ -100,6 +100,21 @@ couchTests.reduce = function(debug) {
T(equals(results.rows[4], {key:["d","a"],value:10*i}));
T(equals(results.rows[5], {key:["d","b"],value:10*i}));
T(equals(results.rows[6], {key:["d","c"],value:10*i}));
+
+ // endkey test with inclusive_end=true
+ var results = db.query(map, reduce, {group_level:2,endkey:["d"],inclusive_end:true});
+ T(equals(results.rows[0], {key:["a"],value:20*i}));
+ T(equals(results.rows[1], {key:["a","b"],value:40*i}));
+ T(equals(results.rows[2], {key:["a","c"],value:10*i}));
+ T(equals(results.rows[3], {key:["d"],value:10*i}));
+ TEquals(4, results.rows.length);
+
+ // endkey test with inclusive_end=false
+ var results = db.query(map, reduce, {group_level:2,endkey:["d"],inclusive_end:false});
+ T(equals(results.rows[0], {key:["a"],value:20*i}));
+ T(equals(results.rows[1], {key:["a","b"],value:40*i}));
+ T(equals(results.rows[2], {key:["a","c"],value:10*i}));
+ TEquals(3, results.rows.length);
}
// now test out more complex reductions that need to use the combine option.
diff --git a/src/couchdb/couch_btree.erl b/src/couchdb/couch_btree.erl
index c63cd8cf..f8c126f3 100644
--- a/src/couchdb/couch_btree.erl
+++ b/src/couchdb/couch_btree.erl
@@ -72,7 +72,10 @@ final_reduce(Reduce, {KVs, Reductions}) ->
fold_reduce(#btree{root=Root}=Bt, Fun, Acc, Options) ->
Dir = couch_util:get_value(dir, Options, fwd),
StartKey = couch_util:get_value(start_key, Options),
- EndKey = couch_util:get_value(end_key, Options),
+ EndKey = case couch_util:get_value(end_key_gt, Options) of
+ undefined -> couch_util:get_value(end_key, Options);
+ LastKey -> LastKey
+ end,
KeyGroupFun = couch_util:get_value(key_group_fun, Options, fun(_,_) -> true end),
{StartKey2, EndKey2} =
case Dir of