diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-13 13:51:43 -0700 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-13 13:51:43 -0700 |
commit | fdd7f2162e42cb534963c0ca6f8b3c9b71ed693b (patch) | |
tree | ca9076ef7bf7d42ce9ae38a32df5c52cee6ce002 | |
parent | README (diff) | |
parent | Fix Cursor.Last() on empty buckets. (diff) | |
download | dedo-fdd7f2162e42cb534963c0ca6f8b3c9b71ed693b.tar.gz dedo-fdd7f2162e42cb534963c0ca6f8b3c9b71ed693b.tar.xz |
Merge pull request #64 from benbjohnson/fix-empty-cursor-last
Fix Cursor.Last() on empty buckets.
-rw-r--r-- | cursor.go | 2 | ||||
-rw-r--r-- | tx_test.go | 27 |
2 files changed, 22 insertions, 7 deletions
@@ -235,7 +235,7 @@ func (c *Cursor) nsearch(key []byte) { // keyValue returns the key and value of the current leaf element. func (c *Cursor) keyValue() ([]byte, []byte) { ref := &c.stack[len(c.stack)-1] - if ref.index >= ref.count() { + if ref.count() == 0 || ref.index >= ref.count() { return nil, nil } @@ -190,12 +190,27 @@ func TestTxDeleteBucketNotFound(t *testing.T) { func TestTxCursorEmptyBucket(t *testing.T) { withOpenDB(func(db *DB, path string) { db.CreateBucket("widgets") - tx, _ := db.Tx() - c := tx.Bucket("widgets").Cursor() - k, v := c.First() - assert.Nil(t, k) - assert.Nil(t, v) - tx.Commit() + db.With(func(tx *Tx) error { + c := tx.Bucket("widgets").Cursor() + k, v := c.First() + assert.Nil(t, k) + assert.Nil(t, v) + return nil + }) + }) +} + +// Ensure that a Tx cursor can reverse iterate over an empty bucket without error. +func TestCursorEmptyBucketReverse(t *testing.T) { + withOpenDB(func(db *DB, path string) { + db.CreateBucket("widgets") + db.With(func(tx *Tx) error { + c := tx.Bucket("widgets").Cursor() + k, v := c.Last() + assert.Nil(t, k) + assert.Nil(t, v) + return nil + }) }) } |