From 941933ed3d1ae7247e4a27c54efb92bdcbd188a8 Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Mon, 2 Feb 2009 20:27:03 +0000 Subject: 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 --- share/server/main.js | 14 +++++++++++--- share/www/script/couch_tests.js | 20 +++++++++++++++----- 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
  • Key: '+row.key+' Value: '+row.value+'
  • '}; + return { + body : '\n
  • Key: '+row.key + +' Value: '+row.value + +' LineNo: '+row_number+'
  • ' + }; } 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 : ''}; } }), - 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 "; } @@ -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); -- cgit v1.2.3