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.
80 lines
1.4 KiB
80 lines
1.4 KiB
var WriteError = require('level-errors').WriteError
|
|
var promisify = require('./promisify')
|
|
var getCallback = require('./common').getCallback
|
|
var getOptions = require('./common').getOptions
|
|
|
|
function Batch (levelup) {
|
|
this._levelup = levelup
|
|
this.batch = levelup.db.batch()
|
|
this.ops = []
|
|
this.length = 0
|
|
}
|
|
|
|
Batch.prototype.put = function (key, value) {
|
|
try {
|
|
this.batch.put(key, value)
|
|
} catch (e) {
|
|
throw new WriteError(e)
|
|
}
|
|
|
|
this.ops.push({ type: 'put', key: key, value: value })
|
|
this.length++
|
|
|
|
return this
|
|
}
|
|
|
|
Batch.prototype.del = function (key) {
|
|
try {
|
|
this.batch.del(key)
|
|
} catch (err) {
|
|
throw new WriteError(err)
|
|
}
|
|
|
|
this.ops.push({ type: 'del', key: key })
|
|
this.length++
|
|
|
|
return this
|
|
}
|
|
|
|
Batch.prototype.clear = function () {
|
|
try {
|
|
this.batch.clear()
|
|
} catch (err) {
|
|
throw new WriteError(err)
|
|
}
|
|
|
|
this.ops = []
|
|
this.length = 0
|
|
|
|
return this
|
|
}
|
|
|
|
Batch.prototype.write = function (options, callback) {
|
|
var levelup = this._levelup
|
|
var ops = this.ops
|
|
var promise
|
|
|
|
callback = getCallback(options, callback)
|
|
|
|
if (!callback) {
|
|
callback = promisify()
|
|
promise = callback.promise
|
|
}
|
|
|
|
options = getOptions(options)
|
|
|
|
try {
|
|
this.batch.write(options, function (err) {
|
|
if (err) { return callback(new WriteError(err)) }
|
|
levelup.emit('batch', ops)
|
|
callback()
|
|
})
|
|
} catch (err) {
|
|
throw new WriteError(err)
|
|
}
|
|
|
|
return promise
|
|
}
|
|
|
|
module.exports = Batch
|