summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2008-10-05 05:32:28 +0000
committerJohn Christopher Anderson <jchris@apache.org>2008-10-05 05:32:28 +0000
commit53b9d1275f3e0d25cbf637eee651e94382dd6a01 (patch)
tree6aa1e2ca5996fa8d1608fbc46ec107f492ce1f30
parenteb5264f55d5b594d7082918e9e94b64bf75d25a1 (diff)
remove unnecessary negative count feature
git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@701748 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--share/www/script/couch_tests.js37
-rw-r--r--src/couchdb/couch_httpd_view.erl47
2 files changed, 6 insertions, 78 deletions
diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js
index cc08e6f8..3abd570e 100644
--- a/share/www/script/couch_tests.js
+++ b/share/www/script/couch_tests.js
@@ -1101,7 +1101,7 @@ var tests = {
var queryFun = function(doc) { emit(doc.integer, null) };
var i;
- // page through the view ascending and going forward
+ // page through the view ascending
for (i = 0; i < docs.length; i += 10) {
var queryResults = db.query(queryFun, null, {
startkey: i,
@@ -1117,23 +1117,7 @@ var tests = {
}
}
- // page through the view ascending and going backward
- for (i = docs.length - 1; i >= 0; i -= 10) {
- var queryResults = db.query(queryFun, null, {
- startkey: i,
- startkey_docid: i,
- count:-10
- });
- T(queryResults.rows.length == 10)
- T(queryResults.total_rows == docs.length)
- T(queryResults.offset == i - 9)
- var j;
- for (j = 0; j < 10;j++) {
- T(queryResults.rows[j].key == i - 9 + j);
- }
- }
-
- // page through the view descending and going forward
+ // page through the view descending
for (i = docs.length - 1; i >= 0; i -= 10) {
var queryResults = db.query(queryFun, null, {
startkey: i,
@@ -1150,23 +1134,6 @@ var tests = {
}
}
- // page through the view descending and going backward
- for (i = 0; i < docs.length; i += 10) {
- var queryResults = db.query(queryFun, null, {
- startkey: i,
- startkey_docid: i,
- descending: true,
- count:-10
- });
- T(queryResults.rows.length == 10)
- T(queryResults.total_rows == docs.length)
- T(queryResults.offset == docs.length - i - 10)
- var j;
- for (j = 0; j < 10; j++) {
- T(queryResults.rows[j].key == i + 9 - j);
- }
- }
-
// ignore decending=false. CouchDB should just ignore that.
for (i = 0; i < docs.length; i += 10) {
var queryResults = db.query(queryFun, null, {
diff --git a/src/couchdb/couch_httpd_view.erl b/src/couchdb/couch_httpd_view.erl
index 0f3dd144..e634e8e2 100644
--- a/src/couchdb/couch_httpd_view.erl
+++ b/src/couchdb/couch_httpd_view.erl
@@ -182,16 +182,8 @@ parse_view_query(Req) ->
case (catch list_to_integer(Value)) of
Count when is_integer(Count) ->
if Count < 0 ->
- Args#view_query_args {
- direction =
- if Args#view_query_args.direction == rev -> fwd;
- true -> rev
- end,
- count=Count,
- start_key = reverse_key_default(Args#view_query_args.start_key),
- start_docid = reverse_key_default(Args#view_query_args.start_docid),
- end_key = reverse_key_default(Args#view_query_args.end_key),
- end_docid = reverse_key_default(Args#view_query_args.end_docid)};
+ Msg = io_lib:format("Count must be a positive integer: count=~s", [Value]),
+ throw({query_parse_error, Msg});
true ->
Args#view_query_args{count=Count}
end;
@@ -248,8 +240,7 @@ make_view_fold_fun(Req, QueryArgs, TotalViewCount, ReduceCountFun) ->
#view_query_args{
end_key = EndKey,
end_docid = EndDocId,
- direction = Dir,
- count = Count
+ direction = Dir
} = QueryArgs,
PassedEndFun =
@@ -264,33 +255,7 @@ make_view_fold_fun(Req, QueryArgs, TotalViewCount, ReduceCountFun) ->
end
end,
- NegCountFun = fun({{Key, DocId}, Value}, OffsetReds,
- {AccCount, AccSkip, Resp, AccRevRows}) ->
- Offset = ReduceCountFun(OffsetReds),
- PassedEnd = PassedEndFun(Key, DocId),
- case {PassedEnd, AccCount, AccSkip, Resp} of
- {true, _, _, _} -> % The stop key has been passed, stop looping.
- {stop, {AccCount, AccSkip, Resp, AccRevRows}};
- {_, 0, _, _} -> % we've done "count" rows, stop foldling
- {stop, {0, 0, Resp, AccRevRows}};
- {_, _, AccSkip, _} when AccSkip > 0 ->
- {ok, {AccCount, AccSkip - 1, Resp, AccRevRows}};
- {_, _, _, undefined} ->
- {ok, Resp2} = start_json_response(Req, 200),
- Offset2 = TotalViewCount - Offset -
- lists:min([TotalViewCount - Offset, - AccCount]),
- JsonBegin = io_lib:format("{\"total_rows\":~w,\"offset\":~w,\"rows\":[\r\n",
- [TotalViewCount, Offset2]),
- send_chunk(Resp2, JsonBegin),
- JsonObj = {[{id, DocId}, {key, Key}, {value, Value}]},
- {ok, {AccCount + 1, 0, Resp2, [?JSON_ENCODE(JsonObj) | AccRevRows]}};
- {_, AccCount, _, Resp} ->
- JsonObj = {[{id, DocId}, {key, Key}, {value, Value}]},
- {ok, {AccCount + 1, 0, Resp, [?JSON_ENCODE(JsonObj), ",\r\n" | AccRevRows]}}
- end
- end,
-
- PosCountFun = fun({{Key, DocId}, Value}, OffsetReds,
+ fun({{Key, DocId}, Value}, OffsetReds,
{AccCount, AccSkip, Resp, AccRevRows}) ->
Offset = ReduceCountFun(OffsetReds), % I think we only need this call once per view
PassedEnd = PassedEndFun(Key, DocId),
@@ -316,10 +281,6 @@ make_view_fold_fun(Req, QueryArgs, TotalViewCount, ReduceCountFun) ->
send_chunk(Resp, ",\r\n" ++ ?JSON_ENCODE(JsonObj)),
{ok, {AccCount - 1, 0, Resp, AccRevRows}}
end
- end,
- case Count > 0 of
- true -> PosCountFun;
- false -> NegCountFun
end.
finish_view_fold(Req, TotalRows, FoldResult) ->