diff --git a/iterator.js b/iterator.js index 9d412e56..1e99a819 100644 --- a/iterator.js +++ b/iterator.js @@ -13,18 +13,9 @@ function Iterator (db, options) { util.inherits(Iterator, AbstractIterator) -Iterator.prototype.seek = function (target) { - if (this._ended) { - throw new Error('cannot call seek() after end()') - } - if (this._nexting) { - throw new Error('cannot call seek() before next() has completed') - } - if (typeof target !== 'string' && !Buffer.isBuffer(target)) { - throw new Error('seek() requires a string or buffer key') - } +Iterator.prototype._seek = function (target) { if (target.length === 0) { - throw new Error('cannot seek() to an empty key') + throw new Error('cannot seek() to an empty target') } this.cache = null diff --git a/leveldown.js b/leveldown.js index 91353932..43c82dcf 100644 --- a/leveldown.js +++ b/leveldown.js @@ -29,6 +29,14 @@ LevelDOWN.prototype._close = function (callback) { this.binding.close(callback) } +LevelDOWN.prototype._serializeKey = function (key) { + return Buffer.isBuffer(key) ? key : String(key) +} + +LevelDOWN.prototype._serializeValue = function (value) { + return Buffer.isBuffer(value) ? value : String(value) +} + LevelDOWN.prototype._put = function (key, value, options, callback) { this.binding.put(key, value, options, callback) } diff --git a/package.json b/package.json index 3f2c896e..67f5d935 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ ], "main": "leveldown.js", "dependencies": { - "abstract-leveldown": "level/abstract-leveldown#51af868", + "abstract-leveldown": "github:Level/abstract-leveldown#0f42686", "bindings": "~1.3.0", "fast-future": "~1.0.2", "nan": "~2.11.0", diff --git a/test/iterator-test.js b/test/iterator-test.js index 6e611ee8..60fee8f2 100644 --- a/test/iterator-test.js +++ b/test/iterator-test.js @@ -3,21 +3,21 @@ const iota = require('iota-array') const lexi = require('lexicographic-integer') const util = require('util') -make('iterator throws if key is not a string or buffer', function (db, t, done) { - var keys = [null, undefined, 1, true, false] - var pending = keys.length +make('iterator#seek throws if target is empty', function (db, t, done) { + var targets = ['', Buffer.alloc(0), []] + var pending = targets.length - keys.forEach(function (key) { - var error + targets.forEach(function (target) { var ite = db.iterator() + var error try { - ite.seek(key) - } catch (e) { - error = e + ite.seek(target) + } catch (err) { + error = err.message } - t.ok(error, 'had error from seek()') + t.is(error, 'cannot seek() to an empty target', 'got error') ite.end(end) }) @@ -86,8 +86,8 @@ make('reverse seek from invalid range', function (db, t, done) { ite.seek('zzz') ite.next(function (err, key, value) { t.error(err, 'no error') - t.same(key.toString(), 'two', 'end of iterator') - t.same(value.toString(), '2', 'end of iterator') + t.same(key.toString(), 'two') + t.same(value.toString(), '2') ite.end(done) }) }) @@ -132,17 +132,20 @@ make('iterator optimized for seek', function (db, t, done) { make('iterator seek before next has completed', function (db, t, done) { var ite = db.iterator() + var error + ite.next(function (err, key, value) { t.error(err, 'no error from next()') ite.end(done) }) - var error + try { ite.seek('two') - } catch (e) { - error = e + } catch (err) { + error = err.message } - t.ok(error, 'had error from seek() before next() has completed') + + t.is(error, 'cannot call seek() before next() has completed', 'got error') }) make('close db with open iterator', function (db, t, done) { @@ -170,12 +173,14 @@ make('iterator seek after end', function (db, t, done) { ite.end(function (err) { t.error(err, 'no error from end()') var error + try { ite.seek('two') - } catch (e) { - error = e + } catch (err) { + error = err.message } - t.ok(error, 'had error from seek() after end()') + + t.is(error, 'cannot call seek() after end()', 'got error') done() }) })