summaryrefslogtreecommitdiff
path: root/share/server
diff options
context:
space:
mode:
authorJohn Christopher Anderson <jchris@apache.org>2009-07-20 04:11:36 +0000
committerJohn Christopher Anderson <jchris@apache.org>2009-07-20 04:11:36 +0000
commit46bf4b727f0fae37b017f194983122c50d3f34e5 (patch)
tree658da02543e8f53388d6ea427afa3e6265d5254d /share/server
parentc3175ec3b2809a553cd0f45bfa39ca573676f842 (diff)
Initial checkin of _changes filters. The prime weak-spot for this approach is that it maintains an OS-process per connected filtered _changes consumer. I'm pretty sure we'll be able to work around this without changing the API, but it'll involve a lot of OS-process bookkeeping. Those enhancements should generally improve show & list performance as well. Punting on them for now, first wanted to get _changes filters implemented so people could give feedback.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@795687 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'share/server')
-rw-r--r--share/server/filter.js25
-rw-r--r--share/server/loop.js3
2 files changed, 27 insertions, 1 deletions
diff --git a/share/server/filter.js b/share/server/filter.js
new file mode 100644
index 00000000..23536db0
--- /dev/null
+++ b/share/server/filter.js
@@ -0,0 +1,25 @@
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+var Filter = {
+ filter : function(docs, req, userCtx) {
+ var results = [];
+ try {
+ for (var i=0; i < docs.length; i++) {
+ results.push((funs[0](docs[i], req, userCtx) && true) || false);
+ };
+ respond([true, results]);
+ } catch (error) {
+ respond(error);
+ }
+ }
+};
diff --git a/share/server/loop.js b/share/server/loop.js
index d65ff02b..af656121 100644
--- a/share/server/loop.js
+++ b/share/server/loop.js
@@ -41,7 +41,8 @@ var dispatch = {
"rereduce" : Views.rereduce,
"validate" : Validate.validate,
"show" : Render.show,
- "list" : Render.list
+ "list" : Render.list,
+ "filter" : Filter.filter
};
while (line = eval(readline())) {