From d248de7f9d76fd24eb5105953121ff6e38a319f3 Mon Sep 17 00:00:00 2001 From: Muneeb Samuels Date: Sun, 4 Nov 2012 22:22:00 +0200 Subject: [PATCH] - added views to do .all queries, it speeds up the query. --- lib/adapters/cradle.js | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/adapters/cradle.js b/lib/adapters/cradle.js index aa462db0..f1d05519 100644 --- a/lib/adapters/cradle.js +++ b/lib/adapters/cradle.js @@ -260,24 +260,31 @@ CradleAdapter.prototype.count = function(model, callback, where) { }; CradleAdapter.prototype.models = function(model, filter, callback, func) { - var limit = 99999999; // maybe there is a better way to do this? + var limit = 200; var skip = 0; if (filter != null) { - limit = filter.limit || limit; - skip = filter.skip ||skip; + limit = filter.limit || limit; + skip = filter.skip ||skip; } - this.client.all( - {include_docs:true, limit: limit, skip: skip}, - errorHandler(callback, function(res, cb) { - var docs = res.map(function(doc) { - return idealize(doc); - }); - var filtered = filtering(docs, model, filter, this._models) + var self = this; - func ? func(filtered, cb) : cb(filtered); - }.bind(this)) - ); + self.client.save('_design/'+model, { + views : { + all : { + map : 'function(doc) { if (doc.nature == "'+model+'") { emit(doc._id, doc); } }' + } + } + }, function() { + self.client.view(model+'/all', {include_docs:true, limit:limit, skip:skip}, errorHandler(callback, function(res, cb) { + var docs = res.map(function(doc) { + return idealize(doc); + }); + var filtered = filtering(docs, model, filter, this._models) + + func ? func(filtered, cb) : cb(filtered); + }.bind(self))); + }); }; CradleAdapter.prototype.all = function(model, filter, callback) {