From 46bf4b727f0fae37b017f194983122c50d3f34e5 Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Mon, 20 Jul 2009 04:11:36 +0000 Subject: 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 --- share/server/filter.js | 25 +++++++++++++++++++++++++ share/server/loop.js | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 share/server/filter.js (limited to 'share/server') 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())) { -- cgit v1.2.3