summaryrefslogtreecommitdiff
path: root/src/couchdb/couch_httpd_show.erl
diff options
context:
space:
mode:
authorPaul Joseph Davis <davisp@apache.org>2009-07-08 01:33:00 +0000
committerPaul Joseph Davis <davisp@apache.org>2009-07-08 01:33:00 +0000
commit02cb712e18ee5647517fc38b6aa0c188af090894 (patch)
tree952b52231a0266bbe9db53a3043fd2adcc68e0da /src/couchdb/couch_httpd_show.erl
parent6012a3374081d92eaade74b15f1c072aaa6ec09f (diff)
Fixes COUCHDB-389
Provide an offset calculation for all view responses. Thanks Brad Anderson. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@792013 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_httpd_show.erl')
-rw-r--r--src/couchdb/couch_httpd_show.erl18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/couchdb/couch_httpd_show.erl b/src/couchdb/couch_httpd_show.erl
index 854b3d80..c29d89c5 100644
--- a/src/couchdb/couch_httpd_show.erl
+++ b/src/couchdb/couch_httpd_show.erl
@@ -146,7 +146,7 @@ output_map_list(#httpd{mochi_req=MReq}=Req, Lang, ListSrc, View, Group, Db, Quer
start_response = StartListRespFun,
send_row = SendListRowFun
}),
- FoldAccInit = {Limit, SkipCount, undefined, []},
+ FoldAccInit = {Limit, SkipCount, undefined, [], nil},
{ok, FoldResult} = couch_view:fold(View, Start, Dir, FoldlFun, FoldAccInit),
finish_list(Req, QueryServer, CurrentEtag, FoldResult, StartListRespFun, RowCount)
end);
@@ -171,7 +171,7 @@ output_map_list(#httpd{mochi_req=MReq}=Req, Lang, ListSrc, View, Group, Db, Quer
StartListRespFun = make_map_start_resp_fun(QueryServer, Db),
SendListRowFun = make_map_send_row_fun(QueryServer),
- FoldAccInit = {Limit, SkipCount, undefined, []},
+ FoldAccInit = {Limit, SkipCount, undefined, [], nil},
{ok, FoldResult} = lists:foldl(
fun(Key, {ok, FoldAcc}) ->
FoldlFun = couch_httpd_view:make_view_fold_fun(Req, QueryArgs#view_query_args{
@@ -317,16 +317,22 @@ output_reduce_list(#httpd{mochi_req=MReq}=Req, Lang, ListSrc, View, Group, Db, Q
end).
finish_list(Req, QueryServer, Etag, FoldResult, StartFun, TotalRows) ->
- case FoldResult of
- {_, _, undefined, _} ->
+ FoldResult2 = case FoldResult of
+ {Limit, SkipCount, Response, RowAcc} ->
+ {Limit, SkipCount, Response, RowAcc, nil};
+ Else ->
+ Else
+ end,
+ case FoldResult2 of
+ {_, _, undefined, _, _} ->
{ok, Resp, BeginBody} =
render_head_for_empty_list(StartFun, Req, Etag, TotalRows),
[<<"end">>, Chunks] = couch_query_servers:render_list_tail(QueryServer),
Chunk = BeginBody ++ ?b2l(?l2b(Chunks)),
send_non_empty_chunk(Resp, Chunk);
- {_, _, Resp, stop} ->
+ {_, _, Resp, stop, _} ->
ok;
- {_, _, Resp, _} ->
+ {_, _, Resp, _, _} ->
[<<"end">>, Chunks] = couch_query_servers:render_list_tail(QueryServer),
send_non_empty_chunk(Resp, ?b2l(?l2b(Chunks)))
end,