summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Joseph Davis <davisp@apache.org>2009-10-19 14:49:50 +0000
committerPaul Joseph Davis <davisp@apache.org>2009-10-19 14:49:50 +0000
commit7cda6c7c2d72053407da7d0caee73026bebab25b (patch)
tree0b8cc2dafbbe3c5e714ad64eb8aeb9464a0b1649
parent430b75f7572d3033fe61e341d0ee5ff1167831e2 (diff)
Fix bug when lists use two design docs.
The language was being pulled from the wrong doc in the pair. Also removed some unused variables. Added a test in list_views.js git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@826692 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--share/www/script/test/list_views.js44
-rw-r--r--src/couchdb/couch_httpd_show.erl8
2 files changed, 45 insertions, 7 deletions
diff --git a/share/www/script/test/list_views.js b/share/www/script/test/list_views.js
index b261be71..e31f0f83 100644
--- a/share/www/script/test/list_views.js
+++ b/share/www/script/test/list_views.js
@@ -177,6 +177,23 @@ couchTests.list_views = function(debug) {
}
}
};
+ var erlListDoc = {
+ _id: "_design/erlang",
+ language: "erlang",
+ lists: {
+ simple:
+ 'fun(Head, {Req}) -> ' +
+ ' Send(<<"[">>), ' +
+ ' Fun = fun({Row}, Sep) -> ' +
+ ' Val = proplists:get_value(<<"key">>, Row, 23), ' +
+ ' Send(list_to_binary(Sep ++ integer_to_list(Val))), ' +
+ ' {ok, ","} ' +
+ ' end, ' +
+ ' {ok, _} = FoldRows(Fun, ""), ' +
+ ' Send(<<"]">>) ' +
+ 'end.'
+ }
+ };
T(db.save(designDoc).ok);
@@ -373,10 +390,33 @@ couchTests.list_views = function(debug) {
// Test we can run lists and views from separate docs.
T(db.save(viewOnlyDesignDoc).ok);
- xhr = CouchDB.request("GET", "/test_suite_db/_design/lists/_list/simpleForm/views/basicView?startkey=-3");
- T(xhr.status == 200, "with query params");
+ var url = "/test_suite_db/_design/lists/_list/simpleForm/views/basicView" +
+ "?startkey=-3";
+ xhr = CouchDB.request("GET", url);
+ T(xhr.status == 200, "multiple design docs.");
T(/Total Rows/.test(xhr.responseText));
T(!(/Key: -4/.test(xhr.responseText)));
T(/FirstKey: -3/.test(xhr.responseText));
T(/LastKey: 0/.test(xhr.responseText));
+
+ var erlViewTest = function() {
+ T(db.save(erlListDoc).ok);
+ var url = "/test_suite_db/_design/erlang/_list/simple/views/basicView" +
+ "?startkey=-3";
+ xhr = CouchDB.request("GET", url);
+ T(xhr.status == 200, "multiple languages in design docs.");
+ var list = JSON.parse(xhr.responseText);
+ T(list.length == 4);
+ for(var i = 0; i < list.length; i++)
+ {
+ T(list[i] + 3 == i);
+ }
+ };
+
+ run_on_modified_server([{
+ section: "native_query_servers",
+ key: "erlang",
+ value: "{couch_native_process, start_link, []}"
+ }], erlViewTest);
+
};
diff --git a/src/couchdb/couch_httpd_show.erl b/src/couchdb/couch_httpd_show.erl
index 3aa6b566..a961033a 100644
--- a/src/couchdb/couch_httpd_show.erl
+++ b/src/couchdb/couch_httpd_show.erl
@@ -124,16 +124,14 @@ handle_view_list(Req, ListDesignName, ListName, ViewDesignName, ViewName, Db, Ke
#doc{body={ListProps}} = couch_httpd_db:couch_doc_open(Db, ListDesignId, nil, []),
if
ViewDesignName == ListDesignName ->
- ViewProps = ListProps,
ViewDesignId = ListDesignId;
true ->
- ViewDesignId = <<"_design/", ViewDesignName/binary>>,
- #doc{body={ViewProps}} = couch_httpd_db:couch_doc_open(Db, ViewDesignId, nil, [])
+ ViewDesignId = <<"_design/", ViewDesignName/binary>>
end,
- ViewLang = proplists:get_value(<<"language">>, ViewProps, <<"javascript">>),
+ ListLang = proplists:get_value(<<"language">>, ListProps, <<"javascript">>),
ListSrc = couch_util:get_nested_json_value({ListProps}, [<<"lists">>, ListName]),
- send_view_list_response(ViewLang, ListSrc, ViewName, ViewDesignId, Req, Db, Keys).
+ send_view_list_response(ListLang, ListSrc, ViewName, ViewDesignId, Req, Db, Keys).
send_view_list_response(Lang, ListSrc, ViewName, DesignId, Req, Db, Keys) ->