summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2009-02-02 20:27:03 +0000
committerJohn Christopher Anderson <jchris@apache.org>2009-02-02 20:27:03 +0000
commit941933ed3d1ae7247e4a27c54efb92bdcbd188a8 (patch)
tree0dfa837f02c72d8471332fc8465955b253052333
parent49c9d17d8e407f54226b4fc4d55c0049ed58d628 (diff)
add iteration numbers to list row functions. closes COUCHDB-233. thanks Benoit Chesneau.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@740094 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--share/server/main.js14
-rw-r--r--share/www/script/couch_tests.js20
2 files changed, 26 insertions, 8 deletions
diff --git a/share/server/main.js b/share/server/main.js
index 723bf655..53ccc012 100644
--- a/share/server/main.js
+++ b/share/server/main.js
@@ -13,6 +13,7 @@
var cmd;
var funs = []; // holds functions used for computation
var map_results = []; // holds temporary emitted values during doc map
+var row_line = {}; // holds row number in list per func
var sandbox = null;
@@ -350,18 +351,25 @@ while (cmd = eval(readline())) {
var listFun = funs[0];
var head = cmd[1];
var req = cmd[2];
- runRenderFunction(listFun, [head, null, req]);
+ row_line[listFun] = 0;
+ runRenderFunction(listFun, [head, null, req, null]);
break;
case "list_row":
var listFun = funs[0];
var row = cmd[1];
var req = cmd[2];
- runRenderFunction(listFun, [null, row, req]);
+ runRenderFunction(listFun, [null, row, req, row_line[listFun]]);
+ row_line[listFun]++;
break;
case "list_tail":
var listFun = funs[0];
var req = cmd[1];
- runRenderFunction(listFun, [null, null, req]);
+ var row_number = null;
+ try {
+ row_number = row_line[listFun];
+ delete row_line[listFun];
+ } catch (e) {}
+ runRenderFunction(listFun, [null, null, req, row_number]);
break;
default:
print(toJSON({error: "query_server_error",
diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js
index e7f8abdb..db1bccf0 100644
--- a/share/www/script/couch_tests.js
+++ b/share/www/script/couch_tests.js
@@ -2677,10 +2677,14 @@ var tests = {
}
},
lists: {
- simpleForm: stringFun(function(head, row, req) {
+ simpleForm: stringFun(function(head, row, req, row_number) {
if (row) {
// we ignore headers on rows and tail
- return {body : '\n<li>Key: '+row.key+' Value: '+row.value+'</li>'};
+ return {
+ body : '\n<li>Key: '+row.key
+ +' Value: '+row.value
+ +' LineNo: '+row_number+'</li>'
+ };
} else if (head) {
// we return an object (like those used by external and show)
// so that we can specify headers
@@ -2695,7 +2699,7 @@ var tests = {
return {body : '</ul>'};
}
}),
- acceptSwitch: stringFun(function(head, row, req) {
+ acceptSwitch: stringFun(function(head, row, req, row_number) {
return respondWith(req, {
html : function() {
// If you're outputting text and you're not setting
@@ -2704,7 +2708,8 @@ var tests = {
return "HTML <ul>";
} else if (row) {
return '\n<li>Key: '
- +row.key+' Value: '+row.value+'</li>';
+ +row.key+' Value: '+row.value
+ +' LineNo: '+row_number+'</li>';
} else { // tail
return "</ul>";
}
@@ -2747,7 +2752,12 @@ var tests = {
T(xhr.status == 200);
T(/Total Rows/.test(xhr.responseText));
T(/Key: 1/.test(xhr.responseText));
-
+ T(/LineNo: 0/.test(xhr.responseText));
+ T(/LineNo: 5/.test(xhr.responseText));
+
+ var lines = xhr.responseText.split('\n');
+ T(/LineNo: 5/.test(lines[6]));
+
// get with query params
var xhr = CouchDB.request("GET", "/test_suite_db/_list/lists/simpleForm/basicView?startkey=3");
T(xhr.status == 200);