You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by kx...@apache.org on 2013/07/24 16:12:43 UTC

git commit: updated refs/heads/master to 54fd258

Updated Branches:
  refs/heads/master 635022b27 -> 54fd258ed


Apply _list functions for _all_docs view. COUCHDB-1139


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/54fd258e
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/54fd258e
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/54fd258e

Branch: refs/heads/master
Commit: 54fd258edd1623f2fa9288d9598debb887e30c35
Parents: 635022b
Author: Alexander Shorin <kx...@apache.org>
Authored: Wed Jul 24 18:12:03 2013 +0400
Committer: Alexander Shorin <kx...@apache.org>
Committed: Wed Jul 24 18:12:03 2013 +0400

----------------------------------------------------------------------
 share/doc/src/changelog.rst                |  2 ++
 share/www/script/test/list_views.js        | 21 +++++++++++++++++++++
 src/couch_mrview/src/couch_mrview_show.erl |  7 ++++++-
 3 files changed, 29 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/54fd258e/share/doc/src/changelog.rst
----------------------------------------------------------------------
diff --git a/share/doc/src/changelog.rst b/share/doc/src/changelog.rst
index de61621..2af83f9 100644
--- a/share/doc/src/changelog.rst
+++ b/share/doc/src/changelog.rst
@@ -35,6 +35,8 @@ Version 1.4.0
 * Bumped Mochiweb dependency to 2.4.2.
 * Disabled link to the Futon test suite.
 * Split up replicator_db tests into multiple independent tests.
+* :issue:`1139`: it's possible to apply :ref:`list <listfun>`
+  functions to ``_all_docs`` view.
 
 1.3.x Branch
 ============

http://git-wip-us.apache.org/repos/asf/couchdb/blob/54fd258e/share/www/script/test/list_views.js
----------------------------------------------------------------------
diff --git a/share/www/script/test/list_views.js b/share/www/script/test/list_views.js
index 633afb4..3a6e045 100644
--- a/share/www/script/test/list_views.js
+++ b/share/www/script/test/list_views.js
@@ -170,6 +170,16 @@ couchTests.list_views = function(debug) {
         });
         send("bad request");
       }),
+      allDocs: stringFun(function(head, req){
+        start({'headers': {'Content-Type': 'application/json'}});
+        var resp = head;
+        var rows = [];
+        while(row=getRow()){
+          rows.push(row);
+        }
+        resp.rows = rows;
+        return toJSON(resp);
+      })
     }
   };
   var viewOnlyDesignDoc = {
@@ -492,4 +502,15 @@ couchTests.list_views = function(debug) {
   T(xhr.status == 400);
   T(xhr.getResponseHeader("X-My-Header") == "MyHeader");
   T(xhr.responseText.match(/^bad request$/));
+
+  // test handling _all_docs by _list functions. the result should be equal
+  var xhr_lAllDocs = CouchDB.request("GET", "/test_suite_db/_design/lists/_list/allDocs/_all_docs");
+  T(xhr_lAllDocs.status == 200, "standard get should be 200");
+  var xhr_allDocs = CouchDB.request("GET", "/test_suite_db/_all_docs");
+  var allDocs = JSON.parse(xhr_allDocs.responseText);
+  var lAllDocs = JSON.parse(xhr_lAllDocs.responseText);
+  TEquals(allDocs.total_rows, lAllDocs.total_rows, "total_rows mismatch");
+  TEquals(allDocs.offset, lAllDocs.offset, "offset mismatch");
+  TEquals(allDocs.rows.length, lAllDocs.rows.length, "amount of rows mismatch");
+  TEquals(allDocs.rows, lAllDocs.rows, "rows mismatch");
 };

http://git-wip-us.apache.org/repos/asf/couchdb/blob/54fd258e/src/couch_mrview/src/couch_mrview_show.erl
----------------------------------------------------------------------
diff --git a/src/couch_mrview/src/couch_mrview_show.erl b/src/couch_mrview/src/couch_mrview_show.erl
index 98b2d63..f8fa837 100644
--- a/src/couch_mrview/src/couch_mrview_show.erl
+++ b/src/couch_mrview/src/couch_mrview_show.erl
@@ -210,7 +210,12 @@ handle_view_list(Req, Db, DDoc, LName, VDDoc, VName, Keys) ->
     couch_httpd:etag_maybe(Req, fun() ->
         couch_query_servers:with_ddoc_proc(DDoc, fun(QServer) ->
             Acc = #lacc{db=Db, req=Req, qserver=QServer, lname=LName},
-            couch_mrview:query_view(Db, VDDoc, VName, Args, fun list_cb/2, Acc)
+            case VName of
+              <<"_all_docs">> ->
+                couch_mrview:query_all_docs(Db, Args, fun list_cb/2, Acc);
+              _ ->
+                couch_mrview:query_view(Db, VDDoc, VName, Args, fun list_cb/2, Acc)
+            end
         end)
     end).