[Pkg-javascript-commits] [node-leveldown] 300/492: iterator: Start on correct value when reverse=true

Andrew Kelley andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:14:11 UTC 2014


This is an automated email from the git hooks/post-receive script.

andrewrk-guest pushed a commit to annotated tag rocksdb-0.10.1
in repository node-leveldown.

commit 701b3c037a54fc5b4f41f556c47db3545426340c
Author: David Björklund <david.bjorklund at gmail.com>
Date:   Fri Mar 29 22:20:36 2013 +0100

    iterator: Start on correct value when reverse=true
    
    Closes #27
---
 src/iterator.cc       |  9 ++++++++-
 test/iterator-test.js | 22 ++++++++++++++++++++--
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/src/iterator.cc b/src/iterator.cc
index e5fdd22..424782b 100644
--- a/src/iterator.cc
+++ b/src/iterator.cc
@@ -59,8 +59,15 @@ Iterator::~Iterator () {
 bool Iterator::GetIterator () {
   if (dbIterator == NULL) {
     dbIterator = database->NewIterator(options);
-    if (start != NULL)
+    if (start != NULL) {
       dbIterator->Seek(*start);
+      if (reverse) {
+        if (!dbIterator->Valid())
+          dbIterator->SeekToLast();
+        else if (start->compare(dbIterator->key()))
+          dbIterator->Prev();
+      }
+    }
     else if (reverse)
       dbIterator->SeekToLast();
     else
diff --git a/test/iterator-test.js b/test/iterator-test.js
index 3a4e1a6..3938545 100644
--- a/test/iterator-test.js
+++ b/test/iterator-test.js
@@ -230,8 +230,8 @@ module.exports.iterator = function (leveldown) {
   test('test iterator with start being a midway key and reverse=true', function (t) {
     collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '49.5', reverse: true }), function (err, data) {
       t.notOk(err, 'no error')
-      t.equal(data.length, 51, 'correct number of entries')
-      var expected = sourceData.slice().reverse().slice(49).map(transformSource)
+      t.equal(data.length, 50, 'correct number of entries')
+      var expected = sourceData.slice().reverse().slice(50).map(transformSource)
       t.deepEqual(data, expected)
       t.end()
     })
@@ -365,6 +365,24 @@ module.exports.iterator = function (leveldown) {
       t.end()
     })
   })
+
+  test('test iterator with start after database end and reverse=true', function (t) {
+    collectEntries(db.iterator({ keyAsBuffer: false, valueAsBuffer: false, start: '9a', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, sourceData.length, 'correct number of entries')
+      var expected = sourceData.slice().reverse().map(transformSource)
+      t.deepEqual(data, expected)
+      t.end()
+    })
+  })
+
+  test('test iterator with start and end after database and and reverse=true', function (t) {
+    collectEntries(db.iterator({ start: '9b', end: '9a', reverse: true }), function (err, data) {
+      t.notOk(err, 'no error')
+      t.equal(data.length, 0, 'correct number of entries')
+      t.end()
+    })
+  })
 }
 
 module.exports.tearDown = function () {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-leveldown.git



More information about the Pkg-javascript-commits mailing list