You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
var util = require('util') |
|
, AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN |
|
|
|
function DeferredLevelDOWN (location) { |
|
AbstractLevelDOWN.call(this, typeof location == 'string' ? location : '') // optional location, who cares? |
|
this._db = undefined |
|
this._operations = [] |
|
} |
|
|
|
util.inherits(DeferredLevelDOWN, AbstractLevelDOWN) |
|
|
|
// called by LevelUP when we have a real DB to take its place |
|
DeferredLevelDOWN.prototype.setDb = function (db) { |
|
this._db = db |
|
this._operations.forEach(function (op) { |
|
db[op.method].apply(db, op.args) |
|
}) |
|
} |
|
|
|
DeferredLevelDOWN.prototype._open = function (options, callback) { |
|
return process.nextTick(callback) |
|
} |
|
|
|
// queue a new deferred operation |
|
DeferredLevelDOWN.prototype._operation = function (method, args) { |
|
if (this._db) |
|
return this._db[method].apply(this._db, args) |
|
this._operations.push({ method: method, args: args }) |
|
} |
|
|
|
// deferrables |
|
'put get del batch approximateSize'.split(' ').forEach(function (m) { |
|
DeferredLevelDOWN.prototype['_' + m] = function () { |
|
this._operation(m, arguments) |
|
} |
|
}) |
|
|
|
DeferredLevelDOWN.prototype._isBuffer = function (obj) { |
|
return Buffer.isBuffer(obj) |
|
} |
|
|
|
// don't need to implement this as LevelUP's ReadStream checks for 'ready' state |
|
DeferredLevelDOWN.prototype._iterator = function () { |
|
throw new TypeError('not implemented') |
|
} |
|
|
|
module.exports = DeferredLevelDOWN
|
|
|