aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tx.go8
-rw-r--r--tx_test.go25
2 files changed, 33 insertions, 0 deletions
diff --git a/tx.go b/tx.go
index 5844ffe..612f493 100644
--- a/tx.go
+++ b/tx.go
@@ -75,6 +75,14 @@ func (tx *Tx) Writable() bool {
return tx.writable
}
+// Cursor creates a cursor associated with the root bucket.
+// All items in the cursor will return a nil value because all root bucket keys point to buckets.
+// The cursor is only valid as long as the transaction is open.
+// Do not use a cursor after the transaction is closed.
+func (tx *Tx) Cursor() *Cursor {
+ return tx.root.Cursor()
+}
+
// Stats retrieves a copy of the current transaction statistics.
func (tx *Tx) Stats() TxStats {
return tx.stats
diff --git a/tx_test.go b/tx_test.go
index e3296ef..61fa5d9 100644
--- a/tx_test.go
+++ b/tx_test.go
@@ -36,6 +36,31 @@ func TestTx_Commit_ReadOnly(t *testing.T) {
})
}
+// Ensure that a transaction can retrieve a cursor on the root bucket.
+func TestTx_Cursor(t *testing.T) {
+ withOpenDB(func(db *DB, path string) {
+ db.Update(func(tx *Tx) error {
+ tx.CreateBucket([]byte("widgets"))
+ tx.CreateBucket([]byte("woojits"))
+ c := tx.Cursor()
+
+ k, v := c.First()
+ assert.Equal(t, "widgets", string(k))
+ assert.Nil(t, v)
+
+ k, v = c.Next()
+ assert.Equal(t, "woojits", string(k))
+ assert.Nil(t, v)
+
+ k, v = c.Next()
+ assert.Nil(t, k)
+ assert.Nil(t, v)
+
+ return nil
+ })
+ })
+}
+
// Ensure that creating a bucket with a read-only transaction returns an error.
func TestTx_CreateBucket_ReadOnly(t *testing.T) {
withOpenDB(func(db *DB, path string) {