From 25e9ffb4384b4fbefe22ad491c2bc7c0e0e4f8ff Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Mon, 30 Jun 2014 11:47:08 -0700 Subject: [PATCH 1/6] allow extra values in get/put callbacks This is mostly to facilitate RiakDOWN, since tracking vclocks manually is sometimes desirable. This will allow the _put method in abstract-leveldown backends to pass a value out to the client, and the _get method to pass extra metadata as well. --- lib/levelup.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/levelup.js b/lib/levelup.js index 22b6721e..63939eb6 100644 --- a/lib/levelup.js +++ b/lib/levelup.js @@ -186,7 +186,7 @@ LevelUP.prototype.get = function (key_, options, callback) { options.asBuffer = util.isValueAsBuffer(options) - this.db.get(key, options, function (err, value) { + this.db.get(key, options, function (err, value, extra) { if (err) { if ((/notfound/i).test(err)) { err = new NotFoundError( @@ -202,7 +202,7 @@ LevelUP.prototype.get = function (key_, options, callback) { } catch (e) { return callback(new EncodingError(e)) } - callback(null, value) + callback(null, value, extra) } }) } @@ -235,13 +235,13 @@ LevelUP.prototype.put = function (key_, value_, options, callback) { key = util.encodeKey(key_, options) value = util.encodeValue(value_, options) - this.db.put(key, value, options, function (err) { + this.db.put(key, value, options, function (err, extra) { if (err) { return dispatchError(self, new WriteError(err), callback) } else { - self.emit('put', key_, value_) + self.emit('put', key_, value_, extra) if (callback) - callback() + callback(null, extra) } }) } From 689897de7bf24653bc4890aa82f916a0628b2d6c Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Mon, 30 Jun 2014 12:11:47 -0700 Subject: [PATCH 2/6] Expose extra metadata in read streams --- lib/read-stream.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/read-stream.js b/lib/read-stream.js index 003da5da..b8241d7b 100644 --- a/lib/read-stream.js +++ b/lib/read-stream.js @@ -13,10 +13,11 @@ var Readable = require('readable-stream').Readable , defaultOptions = { keys: true, values: true } - , makeKeyValueData = function (key, value) { + , makeKeyValueData = function (key, value, extra) { return { key: util.decodeKey(key, this._options) , value: util.decodeValue(value, this._options) + , extra: extra } } , makeKeyData = function (key) { @@ -78,7 +79,7 @@ ReadStream.prototype._read = function read () { if (self._destroyed) return - self._iterator.next(function(err, key, value) { + self._iterator.next(function(err, key, value, extra) { if (err || (key === undefined && value === undefined)) { if (!err && !self._destroyed) self.push(null) @@ -86,7 +87,7 @@ ReadStream.prototype._read = function read () { } try { - value = self._makeData(key, value) + value = self._makeData(key, value, extra) } catch (e) { return self._cleanup(new EncodingError(e)) } From 92d355117c25cfbbf289da18954b4fb15ae8e378 Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Mon, 30 Jun 2014 12:20:21 -0700 Subject: [PATCH 3/6] fix test --- test/leveldown-substitution-test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/leveldown-substitution-test.js b/test/leveldown-substitution-test.js index 542c18b2..e5785011 100644 --- a/test/leveldown-substitution-test.js +++ b/test/leveldown-substitution-test.js @@ -18,13 +18,13 @@ buster.testCase('LevelDOWN Substitution', { levelup('/somewhere/not/writable/booya!', { db: function () { return md } }) , entries = [] , expected = [ - { key: 'a', value: 'A' } - , { key: 'b', value: 'B' } - , { key: 'c', value: 'C' } - , { key: 'd', value: 'D' } - , { key: 'e', value: 'E' } - , { key: 'f', value: 'F' } - , { key: 'i', value: 'I' } + { key: 'a', value: 'A', extra: undefined } + , { key: 'b', value: 'B', extra: undefined } + , { key: 'c', value: 'C', extra: undefined } + , { key: 'd', value: 'D', extra: undefined } + , { key: 'e', value: 'E', extra: undefined } + , { key: 'f', value: 'F', extra: undefined } + , { key: 'i', value: 'I', extra: undefined } ] db.put('f', 'F') From 9e92d6520167fe4048c248ab687ec849b121c53b Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Tue, 1 Jul 2014 12:07:15 -0700 Subject: [PATCH 4/6] Revert "fix test" This reverts commit 92d355117c25cfbbf289da18954b4fb15ae8e378. --- test/leveldown-substitution-test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/leveldown-substitution-test.js b/test/leveldown-substitution-test.js index e5785011..542c18b2 100644 --- a/test/leveldown-substitution-test.js +++ b/test/leveldown-substitution-test.js @@ -18,13 +18,13 @@ buster.testCase('LevelDOWN Substitution', { levelup('/somewhere/not/writable/booya!', { db: function () { return md } }) , entries = [] , expected = [ - { key: 'a', value: 'A', extra: undefined } - , { key: 'b', value: 'B', extra: undefined } - , { key: 'c', value: 'C', extra: undefined } - , { key: 'd', value: 'D', extra: undefined } - , { key: 'e', value: 'E', extra: undefined } - , { key: 'f', value: 'F', extra: undefined } - , { key: 'i', value: 'I', extra: undefined } + { key: 'a', value: 'A' } + , { key: 'b', value: 'B' } + , { key: 'c', value: 'C' } + , { key: 'd', value: 'D' } + , { key: 'e', value: 'E' } + , { key: 'f', value: 'F' } + , { key: 'i', value: 'I' } ] db.put('f', 'F') From 27c25ad43f2b5f6edfe66e10aaef2e8a732e77dd Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Tue, 1 Jul 2014 12:07:43 -0700 Subject: [PATCH 5/6] only add the "extra" parameter when it is defined --- lib/read-stream.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/read-stream.js b/lib/read-stream.js index b8241d7b..cda2af70 100644 --- a/lib/read-stream.js +++ b/lib/read-stream.js @@ -14,11 +14,16 @@ var Readable = require('readable-stream').Readable , defaultOptions = { keys: true, values: true } , makeKeyValueData = function (key, value, extra) { - return { + var result = { key: util.decodeKey(key, this._options) , value: util.decodeValue(value, this._options) - , extra: extra + }; + + if (typeof extra !== 'undefined') { + result.extra = extra; } + + return extra; } , makeKeyData = function (key) { return util.decodeKey(key, this._options) From 1268c5f3f3af8c5b4531235a621a34aa764a243c Mon Sep 17 00:00:00 2001 From: Nathan LaFreniere Date: Tue, 1 Jul 2014 12:09:04 -0700 Subject: [PATCH 6/6] typo --- lib/read-stream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/read-stream.js b/lib/read-stream.js index cda2af70..ccaebe48 100644 --- a/lib/read-stream.js +++ b/lib/read-stream.js @@ -23,7 +23,7 @@ var Readable = require('readable-stream').Readable result.extra = extra; } - return extra; + return result; } , makeKeyData = function (key) { return util.decodeKey(key, this._options)