aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rwtransaction.go8
-rw-r--r--rwtransaction_test.go6
2 files changed, 12 insertions, 2 deletions
diff --git a/rwtransaction.go b/rwtransaction.go
index d9097f3..ddd4b96 100644
--- a/rwtransaction.go
+++ b/rwtransaction.go
@@ -63,14 +63,18 @@ func (t *RWTransaction) CreateBucketIfNotExists(name string) error {
// DeleteBucket deletes a bucket.
// Returns an error if the bucket cannot be found.
func (t *RWTransaction) DeleteBucket(name string) error {
- if b := t.Bucket(name); b == nil {
+ b := t.Bucket(name)
+ if b == nil {
return ErrBucketNotFound
}
// Remove from buckets page.
t.buckets.del(name)
- // TODO(benbjohnson): Free all pages.
+ // Free all pages.
+ t.forEachPage(b.root, 0, func(p *page, depth int) {
+ t.db.freelist.free(t.id(), p)
+ })
return nil
}
diff --git a/rwtransaction_test.go b/rwtransaction_test.go
index 83b2d1f..1635b45 100644
--- a/rwtransaction_test.go
+++ b/rwtransaction_test.go
@@ -66,6 +66,7 @@ func TestRWTransactionCreateBucketIfNotExists(t *testing.T) {
withOpenDB(func(db *DB, path string) {
assert.NoError(t, db.CreateBucketIfNotExists("widgets"))
assert.NoError(t, db.CreateBucketIfNotExists("widgets"))
+ assert.Equal(t, db.CreateBucketIfNotExists(""), ErrBucketNameRequired)
// Read the bucket through a separate transaction.
b, err := db.Bucket("widgets")
@@ -113,12 +114,17 @@ func TestRWTransactionDeleteBucket(t *testing.T) {
db.CreateBucket("widgets")
db.Put("widgets", []byte("foo"), []byte("bar"))
+ b, _ := db.Bucket("widgets")
+
// Delete the bucket and make sure we can't get the value.
assert.NoError(t, db.DeleteBucket("widgets"))
value, err := db.Get("widgets", []byte("foo"))
assert.Equal(t, err, ErrBucketNotFound)
assert.Nil(t, value)
+ // Verify that the bucket's page is free.
+ assert.Equal(t, db.freelist.all(), []pgid{b.root})
+
// Create the bucket again and make sure there's not a phantom value.
assert.NoError(t, db.CreateBucket("widgets"))
value, err = db.Get("widgets", []byte("foo"))