aboutsummaryrefslogtreecommitdiff
path: root/bucket.go
diff options
context:
space:
mode:
Diffstat (limited to 'bucket.go')
-rw-r--r--bucket.go105
1 files changed, 5 insertions, 100 deletions
diff --git a/bucket.go b/bucket.go
index 4114ab7..6653389 100644
--- a/bucket.go
+++ b/bucket.go
@@ -1,13 +1,9 @@
package bolt
-import (
- "bytes"
-)
-
// Bucket represents a collection of key/value pairs inside the database.
-// All keys inside the bucket are unique.
-//
-// Accessing or changing data from a Bucket whose Transaction has closed will cause a panic.
+// All keys inside the bucket are unique. The Bucket type is not typically used
+// directly. Instead the bucket name is typically passed into the Get(), Put(),
+// or Delete() functions.
type Bucket struct {
*bucket
name string
@@ -25,9 +21,8 @@ func (b *Bucket) Name() string {
return b.name
}
-// Cursor creates a new cursor for this bucket.
-func (b *Bucket) Cursor() *Cursor {
- _assert(b.transaction.isOpen(), "transaction not open")
+// cursor creates a new cursor for this bucket.
+func (b *Bucket) cursor() *Cursor {
return &Cursor{
transaction: b.transaction,
root: b.root,
@@ -35,98 +30,8 @@ func (b *Bucket) Cursor() *Cursor {
}
}
-// Get retrieves the value for a key in a named bucket.
-// Returns a nil value if the key does not exist.
-func (b *Bucket) Get(key []byte) []byte {
- _assert(b.transaction.isOpen(), "transaction not open")
- c := b.Cursor()
- k, v := c.Seek(key)
-
- // If our target node isn't the same key as what's passed in then return nil.
- if !bytes.Equal(key, k) {
- return nil
- }
-
- return v
-}
-
-// Put sets the value for a key inside of the bucket.
-// If the key exist then its previous value will be overwritten.
-// Returns an error if bucket was created from a read-only transaction, if the
-// key is blank, if the key is too large, or if the value is too large.
-func (b *Bucket) Put(key []byte, value []byte) error {
- _assert(b.transaction.isOpen(), "transaction not open")
- if !b.transaction.writable {
- return ErrTransactionNotWritable
- } else if len(key) == 0 {
- return ErrKeyRequired
- } else if len(key) > MaxKeySize {
- return ErrKeyTooLarge
- } else if len(value) > MaxValueSize {
- return ErrValueTooLarge
- }
-
- // Move cursor to correct position.
- c := b.Cursor()
- c.Seek(key)
-
- // Insert the key/value.
- c.node(b.transaction).put(key, key, value, 0)
-
- return nil
-}
-
-// Delete removes a key from the bucket.
-// If the key does not exist then nothing is done and a nil error is returned.
-// Returns an error if the bucket was created from a read-only transaction.
-func (b *Bucket) Delete(key []byte) error {
- _assert(b.transaction.isOpen(), "transaction not open")
- if !b.transaction.writable {
- return ErrTransactionNotWritable
- }
-
- // Move cursor to correct position.
- c := b.Cursor()
- c.Seek(key)
-
- // Delete the node if we have a matching key.
- c.node(c.transaction).del(key)
-
- return nil
-}
-
-// NextSequence returns an autoincrementing integer for the bucket.
-// Returns an error if the bucket was created from a read-only transaction or
-// if the next sequence will overflow the int type.
-func (b *Bucket) NextSequence() (int, error) {
- _assert(b.transaction.isOpen(), "transaction not open")
- if !b.transaction.writable {
- return 0, ErrTransactionNotWritable
- } else if b.bucket.sequence == uint64(maxInt) {
- return 0, ErrSequenceOverflow
- }
-
- // Increment and return the sequence.
- b.bucket.sequence++
-
- return int(b.bucket.sequence), nil
-}
-
-// ForEach executes a function for each key/value pair in a bucket.
-func (b *Bucket) ForEach(fn func(k, v []byte) error) error {
- _assert(b.transaction.isOpen(), "transaction not open")
- c := b.Cursor()
- for k, v := c.First(); k != nil; k, v = c.Next() {
- if err := fn(k, v); err != nil {
- return err
- }
- }
- return nil
-}
-
// Stat returns stats on a bucket.
func (b *Bucket) Stat() *BucketStat {
- _assert(b.transaction.isOpen(), "transaction not open")
s := &BucketStat{}
b.transaction.forEachPage(b.root, 0, func(p *page, depth int) {
if (p.flags & leafPageFlag) != 0 {