diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-01-31 12:22:58 -0500 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-01-31 12:22:58 -0500 |
commit | a901cf6a25d301c6c67da3f8f1e51ca2f9c25bd4 (patch) | |
tree | b270b94589bab6b3e39f07886d30b52427b6b23d /db.go | |
parent | Merge pull request #3 from benbjohnson/spill (diff) | |
download | dedo-a901cf6a25d301c6c67da3f8f1e51ca2f9c25bd4.tar.gz dedo-a901cf6a25d301c6c67da3f8f1e51ca2f9c25bd4.tar.xz |
Clean up API.
Diffstat (limited to 'db.go')
-rw-r--r-- | db.go | 96 |
1 files changed, 88 insertions, 8 deletions
@@ -14,12 +14,6 @@ const ( const minPageSize = 0x1000 -var ( - DatabaseNotOpenError = &Error{"db is not open", nil} - DatabaseAlreadyOpenedError = &Error{"db already open", nil} - TransactionInProgressError = &Error{"writable transaction is already in progress", nil} -) - type DB struct { sync.Mutex opened bool @@ -157,9 +151,9 @@ func (db *DB) init() error { // Initialize the meta page. m := p.meta() m.magic = magic - m.version = Version + m.version = version m.pageSize = uint32(db.pageSize) - m.version = Version + m.version = version m.free = 2 m.sys = 3 m.pgid = 4 @@ -239,6 +233,92 @@ func (db *DB) RWTransaction() (*RWTransaction, error) { return t, nil } +// Bucket retrieves a reference to a bucket. +func (db *DB) Bucket(name string) (*Bucket, error) { + t, err := db.Transaction() + if err != nil { + return nil, err + } + defer t.Close() + return t.Bucket(name), nil +} + +// Buckets retrieves a list of all buckets in the database. +func (db *DB) Buckets() ([]*Bucket, error) { + t, err := db.Transaction() + if err != nil { + return nil, err + } + defer t.Close() + return t.Buckets(), nil +} + +// CreateBucket creates a new bucket in the database. +func (db *DB) CreateBucket(name string) error { + t, err := db.RWTransaction() + if err != nil { + return err + } + + if err := t.CreateBucket(name); err != nil { + t.Rollback() + return err + } + + return t.Commit() +} + +// DeleteBucket removes a bucket from the database. +func (db *DB) DeleteBucket(name string) error { + t, err := db.RWTransaction() + if err != nil { + return err + } + + if err := t.DeleteBucket(name); err != nil { + t.Rollback() + return err + } + + return t.Commit() +} + +// Get retrieves the value for a key in a bucket. +func (db *DB) Get(name string, key []byte) ([]byte, error) { + t, err := db.Transaction() + if err != nil { + return nil, err + } + defer t.Close() + return t.Get(name, key), nil +} + +// Put sets the value for a key in a bucket. +func (db *DB) Put(name string, key []byte, value []byte) error { + t, err := db.RWTransaction() + if err != nil { + return err + } + if err := t.Put(name, key, value); err != nil { + t.Rollback() + return err + } + return t.Commit() +} + +// Delete removes a key from a bucket. +func (db *DB) Delete(name string, key []byte) error { + t, err := db.RWTransaction() + if err != nil { + return err + } + if err := t.Delete(name, key); err != nil { + t.Rollback() + return err + } + return t.Commit() +} + // page retrieves a page reference from the mmap based on the current page size. func (db *DB) page(id pgid) *page { return (*page)(unsafe.Pointer(&db.data[id*pgid(db.pageSize)])) |