diff options
author | Robert Newson <rnewson@apache.org> | 2011-01-28 17:52:43 +0000 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2011-01-28 17:52:43 +0000 |
commit | e9fa396941f2738f9ba10a4521f0415b2c612f1c (patch) | |
tree | d2e3b4d3e175f29b114697e8f3618d16e06db96b | |
parent | a666c0a3ea2fe0b65e8fb9b5034c8d9a64f5a905 (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.js | 15 | ||||
-rw-r--r-- | src/couchdb/couch_btree.erl | 5 |
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 |