From ee3690e5029e0b585d0172ab9554def9ad21fcfd Mon Sep 17 00:00:00 2001 From: Adam Lofts Date: Sun, 20 May 2012 14:12:03 +0100 Subject: [PATCH 1/2] Add test cases for empty keys query parameter --- share/www/script/test/view_multi_key_all_docs.js | 4 ++++ share/www/script/test/view_multi_key_design.js | 4 ++++ share/www/script/test/view_multi_key_temp.js | 3 +++ 3 files changed, 11 insertions(+) diff --git a/share/www/script/test/view_multi_key_all_docs.js b/share/www/script/test/view_multi_key_all_docs.js index 1113be4d99..7c7f6f8948 100644 --- a/share/www/script/test/view_multi_key_all_docs.js +++ b/share/www/script/test/view_multi_key_all_docs.js @@ -88,4 +88,8 @@ couchTests.view_multi_key_all_docs = function(debug) { T(rows[1].error == "not_found"); T(!rows[1].id); T(rows[2].id == rows[2].key && rows[2].key == "0"); + + // empty keys + rows = db.allDocs({keys: []}, null).rows; + T(rows.length == 0); }; diff --git a/share/www/script/test/view_multi_key_design.js b/share/www/script/test/view_multi_key_design.js index 3839695557..a84d07a498 100644 --- a/share/www/script/test/view_multi_key_design.js +++ b/share/www/script/test/view_multi_key_design.js @@ -61,6 +61,10 @@ couchTests.view_multi_key_design = function(debug) { T(rows[i].key == rows[i].value); } + // with empty keys + rows = db.view("test/all_docs",{keys:[]},null).rows; + T(rows.length == 0); + var reduce = db.view("test/summate",{group:true},keys).rows; T(reduce.length == keys.length); for(var i=0; i Date: Sun, 20 May 2012 15:09:51 +0100 Subject: [PATCH 2/2] Differentiate between keys=undefined and keys=[] in query This commit restores the 1.2 behavior of returning no results when passed an empty keys array. --- src/couch_mrview/src/couch_mrview_util.erl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl index 2d75df9638..ba4de2d642 100644 --- a/src/couch_mrview/src/couch_mrview_util.erl +++ b/src/couch_mrview/src/couch_mrview_util.erl @@ -260,7 +260,8 @@ all_docs_reduce_to_count(Reductions) -> {Count, _, _} = couch_btree:final_reduce(Reduce, Reductions), Count. - +reduce_to_count(nil) -> + 0; reduce_to_count(Reductions) -> Reduce = fun (reduce, KVs) -> @@ -592,10 +593,7 @@ ad_ekey_opts(#mrargs{end_key_docid=EKeyDocId}=Args) -> key_opts(Args) -> key_opts(Args, []). - -key_opts(#mrargs{keys=undefined}=Args, Extra) -> - key_opts(Args#mrargs{keys=[]}, Extra); -key_opts(#mrargs{keys=[], direction=Dir}=Args, Extra) -> +key_opts(#mrargs{keys=undefined, direction=Dir}=Args, Extra) -> [[{dir, Dir}] ++ skey_opts(Args) ++ ekey_opts(Args) ++ Extra]; key_opts(#mrargs{keys=Keys, direction=Dir}=Args, Extra) -> lists:map(fun(K) ->