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/02/08 00:16:21 UTC

chttpd commit: updated refs/heads/1993-bigcouch-couch-mrview to 92e4d99

Updated Branches:
  refs/heads/1993-bigcouch-couch-mrview [created] 92e4d99b5


Switch to using couch_mrview_http view callbacks


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

Branch: refs/heads/1993-bigcouch-couch-mrview
Commit: 92e4d99b57ee7a22a344c4f5b40679b7a698147b
Parents: a1b8b07
Author: Russell Branca <ch...@gmail.com>
Authored: Fri Feb 7 15:09:57 2014 -0800
Committer: Russell Branca <ch...@gmail.com>
Committed: Fri Feb 7 15:09:57 2014 -0800

----------------------------------------------------------------------
 src/chttpd_db.erl   |  2 +-
 src/chttpd_view.erl | 53 ++++++++++++++----------------------------------
 2 files changed, 16 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/92e4d99b/src/chttpd_db.erl
----------------------------------------------------------------------
diff --git a/src/chttpd_db.erl b/src/chttpd_db.erl
index de99828..d5aedb0 100644
--- a/src/chttpd_db.erl
+++ b/src/chttpd_db.erl
@@ -494,7 +494,7 @@ all_docs_callback({total_and_offset, Total, Offset}, {_, Resp}) ->
     {ok, Resp1} = chttpd:send_delayed_chunk(Resp, io_lib:format(Chunk, [Total, Offset])),
     {ok, {"", Resp1}};
 all_docs_callback({row, Row}, {Prepend, Resp}) ->
-    {ok, Resp1} = chttpd:send_delayed_chunk(Resp, [Prepend, ?JSON_ENCODE(Row)]),
+    {ok, Resp1} = chttpd:send_delayed_chunk(Resp, [Prepend, ?JSON_ENCODE({Row})]),
     {ok, {",\r\n", Resp1}};
 all_docs_callback(complete, {_, Resp}) ->
     {ok, Resp1} = chttpd:send_delayed_chunk(Resp, "\r\n]}"),

http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/92e4d99b/src/chttpd_view.erl
----------------------------------------------------------------------
diff --git a/src/chttpd_view.erl b/src/chttpd_view.erl
index 85b88a3..e9a2796 100644
--- a/src/chttpd_view.erl
+++ b/src/chttpd_view.erl
@@ -41,7 +41,7 @@ multi_query_view(Req, Db, DDoc, ViewName, Queries) ->
                 Db,
                 DDoc,
                 ViewName,
-                fun view_callback/2,
+                fun couch_mrview_http:view_cb/2,
                 {nil, RespAcc},
                 parse_view_params(FullParams, nil, ViewType)
             ),
@@ -52,42 +52,19 @@ multi_query_view(Req, Db, DDoc, ViewName, Queries) ->
     end).
 
 design_doc_view(Req, Db, DDoc, ViewName, Keys) ->
-    Group = couch_view_group:design_doc_to_view_group(DDoc),
-    IsReduce = get_reduce_type(Req),
-    ViewType = extract_view_type(ViewName, couch_view_group:get_views(Group),
-        IsReduce),
-    QueryArgs = parse_view_params(Req, Keys, ViewType),
-    % TODO proper calculation of etag
-    % Etag = view_group_etag(ViewGroup, Db, Keys),
-    Etag = couch_uuids:new(),
-    couch_stats_collector:increment({httpd, view_reads}),
-    chttpd:etag_respond(Req, Etag, fun() ->
-        {ok, Resp} = chttpd:start_delayed_json_response(Req, 200, [{"Etag",Etag}]),
-        CB = fun view_callback/2,
-        {ok, Resp1} = fabric:query_view(Db, DDoc, ViewName, CB, {nil, Resp}, QueryArgs),
-        chttpd:end_delayed_json_response(Resp1)
-    end).
-
-view_callback({total_and_offset, Total, Offset}, {nil, Resp}) ->
-    Chunk = "{\"total_rows\":~p,\"offset\":~p,\"rows\":[\r\n",
-    {ok, Resp1} = chttpd:send_delayed_chunk(Resp, io_lib:format(Chunk, [Total, Offset])),
-    {ok, {"", Resp1}};
-view_callback({total_and_offset, _, _}, Acc) ->
-    % a sorted=false view where the message came in late.  Ignore.
-    {ok, Acc};
-view_callback({row, Row}, {nil, Resp}) ->
-    % first row of a reduce view, or a sorted=false view
-    {ok, Resp1} = chttpd:send_delayed_chunk(Resp, ["{\"rows\":[\r\n", ?JSON_ENCODE(Row)]),
-    {ok, {",\r\n", Resp1}};
-view_callback({row, Row}, {Prepend, Resp}) ->
-    {ok, Resp1} = chttpd:send_delayed_chunk(Resp, [Prepend, ?JSON_ENCODE(Row)]),
-    {ok, {",\r\n", Resp1}};
-view_callback(complete, {nil, Resp}) ->
-    chttpd:send_delayed_chunk(Resp, "{\"rows\":[]}");
-view_callback(complete, {_, Resp}) ->
-    chttpd:send_delayed_chunk(Resp, "\r\n]}");
-view_callback({error, Reason}, {_, Resp}) ->
-    chttpd:send_delayed_error(Resp, Reason).
+    Args0 = couch_mrview_http:parse_qs(Req, Keys),
+    ETagFun = fun(Sig, Acc0) ->
+        couch_mrview_http:check_view_etag(Sig, Acc0, Req)
+    end,
+    Args = Args0#mrargs{preflight_fun=ETagFun},
+    {ok, Resp} = couch_httpd:etag_maybe(Req, fun() ->
+        VAcc0 = #vacc{db=Db, req=Req},
+        fabric:query_view(Db, DDoc, ViewName, fun couch_mrview_http:view_cb/2, VAcc0, Args)
+    end),
+    case is_record(Resp, vacc) of
+        true -> {ok, Resp#vacc.resp};
+        _ -> {ok, Resp}
+    end.
 
 extract_view_type(_ViewName, [], _IsReduce) ->
     throw({not_found, missing_named_view});
@@ -104,7 +81,7 @@ extract_view_type(ViewName, [View|Rest], IsReduce) ->
 
 handle_view_req(#httpd{method='GET',
         path_parts=[_, _, _, _, ViewName]}=Req, Db, DDoc) ->
-    Keys = chttpd:qs_json_value(Req, "keys", nil),
+    Keys = chttpd:qs_json_value(Req, "keys", undefined),
     design_doc_view(Req, Db, DDoc, ViewName, Keys);
 
 handle_view_req(#httpd{method='POST',