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

Commit f5a3ca3

Browse files
authored
Add db.getMany(keys) (#214)
Ref Level/community#101
1 parent 2ccda5d commit f5a3ca3

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

index.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = Level
66

77
const AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN
88
const inherits = require('inherits')
9+
const parallel = require('run-parallel-limit')
910
const Iterator = require('./iterator')
1011
const serialize = require('./util/serialize')
1112
const deserialize = require('./util/deserialize')
@@ -22,7 +23,8 @@ function Level (location, opts) {
2223
bufferKeys: support.bufferKeys(indexedDB),
2324
snapshots: true,
2425
permanence: true,
25-
clear: true
26+
clear: true,
27+
getMany: true
2628
})
2729

2830
opts = opts || {}
@@ -102,6 +104,32 @@ Level.prototype._get = function (key, options, callback) {
102104
})
103105
}
104106

107+
Level.prototype._getMany = function (keys, options, callback) {
108+
const asBuffer = options.asBuffer
109+
const store = this.store('readonly')
110+
const tasks = keys.map((key) => (next) => {
111+
let request
112+
113+
try {
114+
request = store.get(key)
115+
} catch (err) {
116+
return next(err)
117+
}
118+
119+
request.onsuccess = () => {
120+
const value = request.result
121+
next(null, value === undefined ? value : deserialize(value, asBuffer))
122+
}
123+
124+
request.onerror = (ev) => {
125+
ev.stopPropagation()
126+
next(request.error)
127+
}
128+
})
129+
130+
parallel(tasks, 16, callback)
131+
}
132+
105133
Level.prototype._del = function (key, options, callback) {
106134
const store = this.store('readwrite')
107135
let req

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323
"sauce-labs.svg"
2424
],
2525
"dependencies": {
26-
"abstract-leveldown": "^7.0.0",
26+
"abstract-leveldown": "^7.2.0",
2727
"buffer": "^6.0.3",
2828
"inherits": "^2.0.3",
29-
"ltgt": "^2.1.2"
29+
"ltgt": "^2.1.2",
30+
"run-parallel-limit": "^1.1.0"
3031
},
3132
"devDependencies": {
3233
"airtap": "^4.0.1",

test/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ const testCommon = suite.common({
2222
// Support of buffer keys depends on environment
2323
bufferKeys: leveljs(uuid()).supports.bufferKeys,
2424

25-
// Opt-in to new clear() tests
26-
clear: true
25+
// Opt-in to new tests
26+
clear: true,
27+
getMany: true
2728
})
2829

2930
// Test abstract-leveldown compliance

0 commit comments

Comments
 (0)