You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ch...@apache.org on 2014/03/11 18:10:30 UTC

[2/2] fabric commit: updated refs/heads/1993-bigcouch-couch-mrview to fa73a5d

Use ddoc_to_mrst instead of trying to load the local view

This fixes a problem where loading the view locally assumes that the
database is actually on the node in question, which is not a safe
assumption to make. This takes the ddoc and passes it through
ddoc_to_mrst which will allow us to do validation on the request and
also to determine whether or not the given view queried is a reduce
view.


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

Branch: refs/heads/1993-bigcouch-couch-mrview
Commit: fa73a5dc5290be5d921c0fbaf1a144930f56bca8
Parents: 3eab4d6
Author: Russell Branca <ch...@apache.org>
Authored: Tue Mar 11 13:10:34 2014 -0400
Committer: Russell Branca <ch...@apache.org>
Committed: Tue Mar 11 13:10:34 2014 -0400

----------------------------------------------------------------------
 src/fabric.erl | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/fa73a5dc/src/fabric.erl
----------------------------------------------------------------------
diff --git a/src/fabric.erl b/src/fabric.erl
index 24bd9b8..5be6f49 100644
--- a/src/fabric.erl
+++ b/src/fabric.erl
@@ -280,23 +280,20 @@ query_view(DbName, DesignName, ViewName, QueryArgs) ->
     any().
 query_view(DbName, GroupId, ViewName, Callback, Acc0, QueryArgs)
         when is_binary(GroupId) ->
-    {ok, DDoc} = fabric:open_doc(DbName, <<"_design/", GroupId/binary>>, []),
+    {ok, DDoc} = ddoc_cache:open(DbName, <<"_design/", GroupId/binary>>),
     query_view(DbName, DDoc, ViewName, Callback, Acc0, QueryArgs);
-query_view(DbName, Design, ViewName, Callback, Acc0, QueryArgs0) ->
+query_view(DbName, DDoc, ViewName, Callback, Acc0, QueryArgs0) ->
     Db = dbname(DbName), View = name(ViewName),
-    {VInfo, QueryArgs2} = couch_util:with_db(
-        Db,
-        fun(WDb) ->
-            {ok, VInfo0, _Sig, QueryArgs1} =
-                couch_mrview_util:get_view(WDb, Design, ViewName, QueryArgs0),
-            {VInfo0, QueryArgs1}
-        end
-    ),
-    case is_reduce_view(VInfo) of
+    {ok, #mrst{views=Views, language=Lang}} =
+        couch_mrview_util:ddoc_to_mrst(Db, DDoc),
+    QueryArgs1 = couch_mrview_util:set_view_type(QueryArgs0, View, Views),
+    QueryArgs2 = couch_mrview_util:validate_args(QueryArgs1),
+    VInfo = couch_mrview_util:extract_view(Lang, QueryArgs2, View, Views),
+    case is_reduce_view(QueryArgs2) of
         true ->
             fabric_view_reduce:go(
                 Db,
-                Design,
+                DDoc,
                 View,
                 QueryArgs2,
                 Callback,
@@ -304,7 +301,7 @@ query_view(DbName, Design, ViewName, Callback, Acc0, QueryArgs0) ->
                 VInfo
             );
         false ->
-            fabric_view_map:go(Db, Design, View, QueryArgs2, Callback, Acc0)
+            fabric_view_map:go(Db, DDoc, View, QueryArgs2, Callback, Acc0)
     end.
 
 %% @doc retrieve info about a view group, disk size, language, whether compaction
@@ -456,6 +453,8 @@ default_callback(complete, Acc) ->
 default_callback(Row, Acc) ->
     {ok, [Row | Acc]}.
 
+is_reduce_view(#mrargs{view_type=ViewType}) ->
+    ViewType =:= red;
 is_reduce_view({Reduce, _, _}) ->
     Reduce =:= red.