Skip to content
This repository was archived by the owner on Dec 2, 2024. It is now read-only.

Commit 0012276

Browse files
committed
support preput,predel,prebatch
1 parent 577f9be commit 0012276

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ Returns a new duplex server stream that you should connect with a client. Option
9393

9494
``` js
9595
{
96-
readonly: true // make the database be accessible as read only
96+
readonly: true, // make the database be accessible as read only
97+
preput: function (key, val, cb) {}, // called before puts
98+
predel: function (key, cb) {}, // called before dels
99+
prebatch: function (batch, cb) {} // called before batches
97100
}
98101
```
99102

server.js

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@ var DECODERS = [
1212
]
1313

1414
module.exports = function (db, opts) {
15-
var readonly = !!(opts && opts.readonly)
15+
if (!opts) opts = {}
16+
17+
var readonly = !!(opts.readonly)
1618
var decode = lpstream.decode()
1719
var encode = lpstream.encode()
1820
var stream = duplexify(decode, encode)
1921

22+
var preput = opts.preput || function (key, val, cb) { cb(null) }
23+
var predel = opts.predel || function (key, cb) { cb(null) }
24+
var prebatch = opts.prebatch || function (ops, cb) { cb(null) }
25+
2026
if (db.isOpen()) ready()
2127
else db.open(ready)
2228

@@ -73,8 +79,11 @@ module.exports = function (db, opts) {
7379
}
7480

7581
function onput (req) {
76-
down.put(req.key, req.value, function (err) {
77-
callback(req.id, err, null)
82+
preput(req.key, req.value, function (err) {
83+
if (err) return callback(err)
84+
down.put(req.key, req.value, function (err) {
85+
callback(req.id, err, null)
86+
})
7887
})
7988
}
8089

@@ -85,8 +94,11 @@ module.exports = function (db, opts) {
8594
}
8695

8796
function ondel (req) {
88-
down.del(req.key, function (err) {
89-
callback(req.id, err)
97+
predel(req.key, function (err) {
98+
if (err) return callback(err)
99+
down.del(req.key, function (err) {
100+
callback(req.id, err)
101+
})
90102
})
91103
}
92104

@@ -95,8 +107,11 @@ module.exports = function (db, opts) {
95107
}
96108

97109
function onbatch (req) {
98-
down.batch(req.ops, function (err) {
99-
callback(req.id, err)
110+
prebatch(req.ops, function (err) {
111+
if (err) return callback(err)
112+
down.batch(req.ops, function (err) {
113+
callback(req.id, err)
114+
})
100115
})
101116
}
102117

@@ -122,6 +137,13 @@ function Iterator (down, req, encode) {
122137

123138
this.batch = req.batch || 0
124139

140+
if (req.options) {
141+
if (req.options.gt === null) req.options.gt = undefined
142+
if (req.options.gte === null) req.options.gte = undefined
143+
if (req.options.lt === null) req.options.lt = undefined
144+
if (req.options.lte === null) req.options.lte = undefined
145+
}
146+
125147
this._iterator = down.iterator(req.options)
126148
this._encode = encode
127149
this._send = send

test/basic.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var levelup = require('levelup')
55
var multileveldown = require('../')
66

77
tape('get', function (t) {
8-
var db = levelup('no-location', {db: memdown})
8+
var db = levelup('no-location', {db: mem})
99
var stream = multileveldown.server(db)
1010
var client = multileveldown.client()
1111

@@ -21,7 +21,7 @@ tape('get', function (t) {
2121
})
2222

2323
tape('put', function (t) {
24-
var db = levelup('no-location', {db: memdown})
24+
var db = levelup('no-location', {db: mem})
2525
var stream = multileveldown.server(db)
2626
var client = multileveldown.client()
2727

@@ -38,7 +38,7 @@ tape('put', function (t) {
3838
})
3939

4040
tape('readonly', function (t) {
41-
var db = levelup('no-location', {db: memdown})
41+
var db = levelup('no-location', {db: mem})
4242

4343
db.put('hello', 'verden')
4444

@@ -58,7 +58,7 @@ tape('readonly', function (t) {
5858
})
5959

6060
tape('del', function (t) {
61-
var db = levelup('no-location', {db: memdown})
61+
var db = levelup('no-location', {db: mem})
6262
var stream = multileveldown.server(db)
6363
var client = multileveldown.client()
6464

@@ -78,7 +78,7 @@ tape('del', function (t) {
7878
})
7979

8080
tape('batch', function (t) {
81-
var db = levelup('no-location', {db: memdown})
81+
var db = levelup('no-location', {db: mem})
8282
var stream = multileveldown.server(db)
8383
var client = multileveldown.client()
8484

@@ -99,7 +99,7 @@ tape('batch', function (t) {
9999
})
100100

101101
tape('read stream', function (t) {
102-
var db = levelup('no-location', {db: memdown})
102+
var db = levelup('no-location', {db: mem})
103103
var stream = multileveldown.server(db)
104104
var client = multileveldown.client()
105105

@@ -118,7 +118,7 @@ tape('read stream', function (t) {
118118
})
119119

120120
tape('read stream (gt)', function (t) {
121-
var db = levelup('no-location', {db: memdown})
121+
var db = levelup('no-location', {db: mem})
122122
var stream = multileveldown.server(db)
123123
var client = multileveldown.client()
124124

@@ -134,3 +134,7 @@ tape('read stream (gt)', function (t) {
134134
}))
135135
})
136136
})
137+
138+
function mem () {
139+
return memdown()
140+
}

0 commit comments

Comments
 (0)