Skip to content

Commit

Permalink
Fixed deferred search in Level-js/IndexedDB.
Browse files Browse the repository at this point in the history
  • Loading branch information
mcollina committed Jan 17, 2014
1 parent 8683aa1 commit 22597bd
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 16 deletions.
17 changes: 16 additions & 1 deletion 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;
};
22 changes: 8 additions & 14 deletions lib/queryplanner.js
Expand Up @@ -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);
Expand Down
6 changes: 5 additions & 1 deletion test/queryplanner_spec.js
Expand Up @@ -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' });
});

Expand Down
7 changes: 7 additions & 0 deletions test/triple_store_spec.js
Expand Up @@ -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();
});
});
});

0 comments on commit 22597bd

Please sign in to comment.