diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-02-16 12:36:37 -0700 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-02-16 12:36:37 -0700 |
commit | 63e8e474d7d26f60eb6f97f92f051a925958819f (patch) | |
tree | 3d52bf8fe4b404cc925a2c2b57e810382252e4fd | |
parent | Merge branch 'master' of https://github.com/boltdb/bolt (diff) | |
download | dedo-63e8e474d7d26f60eb6f97f92f051a925958819f.tar.gz dedo-63e8e474d7d26f60eb6f97f92f051a925958819f.tar.xz |
Add CreateBucketIfNotExists().
-rw-r--r-- | db.go | 8 | ||||
-rw-r--r-- | rwtransaction.go | 10 | ||||
-rw-r--r-- | rwtransaction_test.go | 13 |
3 files changed, 31 insertions, 0 deletions
@@ -389,6 +389,14 @@ func (db *DB) CreateBucket(name string) error { }) } +// CreateBucketIfNotExists creates a new bucket with the given name if it doesn't already exist. +// This function can return an error if the name is blank, or the bucket name is too long. +func (db *DB) CreateBucketIfNotExists(name string) error { + return db.Do(func(t *RWTransaction) error { + return t.CreateBucketIfNotExists(name) + }) +} + // DeleteBucket removes a bucket from the database. // Returns an error if the bucket does not exist. func (db *DB) DeleteBucket(name string) error { diff --git a/rwtransaction.go b/rwtransaction.go index 1c7a5f0..57135f3 100644 --- a/rwtransaction.go +++ b/rwtransaction.go @@ -49,6 +49,16 @@ func (t *RWTransaction) CreateBucket(name string) error { return nil } +// CreateBucketIfNotExists creates a new bucket if it doesn't already exist. +// Returns an error if the bucket name is blank, or if the bucket name is too long. +func (t *RWTransaction) CreateBucketIfNotExists(name string) error { + err := t.CreateBucket(name) + if err != nil && err != ErrBucketExists { + return err + } + return nil +} + // DeleteBucket deletes a bucket. // Returns an error if the bucket cannot be found. func (t *RWTransaction) DeleteBucket(name string) error { diff --git a/rwtransaction_test.go b/rwtransaction_test.go index 704c563..ea84b87 100644 --- a/rwtransaction_test.go +++ b/rwtransaction_test.go @@ -44,6 +44,19 @@ func TestRWTransactionCreateBucket(t *testing.T) { }) } +// Ensure that a bucket can be created if it doesn't already exist. +func TestRWTransactionCreateBucketIfNotExists(t *testing.T) { + withOpenDB(func(db *DB, path string) { + assert.NoError(t, db.CreateBucketIfNotExists("widgets")) + assert.NoError(t, db.CreateBucketIfNotExists("widgets")) + + // Read the bucket through a separate transaction. + b, err := db.Bucket("widgets") + assert.NotNil(t, b) + assert.NoError(t, err) + }) +} + // Ensure that a bucket cannot be created twice. func TestRWTransactionRecreateBucket(t *testing.T) { withOpenDB(func(db *DB, path string) { |