diff --git a/lib/getdb-browser.js b/lib/getdb-browser.js index 312f48a..3512763 100644 --- a/lib/getdb-browser.js +++ b/lib/getdb-browser.js @@ -1,3 +1,18 @@ var Leveljs = require('level-js'); -module.exports = function(l) { return new Leveljs(l); }; +module.exports = function(location) { + var db = new Leveljs(location); + + // monkey patching _approximateSize + // see https://github.com/maxogden/level.js/pull/21 + db._approximateSize = function(a, b, callback) { + var err = new Error('Not implemented'); + if (callback) { + return callback(err); + } + + throw err; + }; + + return db; +}; diff --git a/lib/queryplanner.js b/lib/queryplanner.js index 5e91230..72e36f1 100644 --- a/lib/queryplanner.js +++ b/lib/queryplanner.js @@ -22,21 +22,15 @@ function queryplanner(db, options) { async.each(query, function(q, cb) { var newq = queryMask(q) - , range = utilities.createQuery(newq) - , result = function(err, size) { - if (err) { - return cb(err); - } - q.size = size; - async.nextTick(cb); - }; - - try { - db.approximateSize(range.start, range.end, result); - } catch(err) { - result(null, Object.keys(variablesMask(q)).length); - } + , range = utilities.createQuery(newq); + db.approximateSize(range.start, range.end, function(err, size) { + if (err) { + size = Object.keys(variablesMask(q)).length; + } + q.size = size; + async.nextTick(cb); + }); }, function(err) { if (err) { callback(err); diff --git a/test/queryplanner_spec.js b/test/queryplanner_spec.js index c3d4690..fd4fa35 100644 --- a/test/queryplanner_spec.js +++ b/test/queryplanner_spec.js @@ -503,7 +503,11 @@ describe('query planner', function() { describe('without approximateSize', function() { beforeEach(function() { - db = {}; + db = { + approximateSize: function(a, b, cb) { + cb(new Error('not implemented')); + } + }; planner = queryplanner(db, { joinAlgorithm: 'sort' }); }); diff --git a/test/triple_store_spec.js b/test/triple_store_spec.js index 522c506..96ed63b 100644 --- a/test/triple_store_spec.js +++ b/test/triple_store_spec.js @@ -385,4 +385,11 @@ describe('deferred open support', function() { done(); }); }); + + it('should support deferred search', function(done) { + db = levelgraph(level()); + db.search([{ predicate: 'likes' }], function() { + done(); + }); + }); });