aboutsummaryrefslogtreecommitdiff
path: root/tx.go
diff options
context:
space:
mode:
Diffstat (limited to 'tx.go')
-rw-r--r--tx.go34
1 files changed, 20 insertions, 14 deletions
diff --git a/tx.go b/tx.go
index c18fbf7..8c78184 100644
--- a/tx.go
+++ b/tx.go
@@ -97,7 +97,9 @@ func (t *Tx) Buckets() []*Bucket {
// CreateBucket creates a new bucket.
// Returns an error if the bucket already exists, if the bucket name is blank, or if the bucket name is too long.
func (t *Tx) CreateBucket(name string) error {
- if !t.writable {
+ if t.db == nil {
+ return ErrTxClosed
+ } else if !t.writable {
return ErrTxNotWritable
} else if b := t.Bucket(name); b != nil {
return ErrBucketExists
@@ -133,7 +135,9 @@ func (t *Tx) CreateBucketIfNotExists(name string) error {
// DeleteBucket deletes a bucket.
// Returns an error if the bucket cannot be found.
func (t *Tx) DeleteBucket(name string) error {
- if !t.writable {
+ if t.db == nil {
+ return ErrTxClosed
+ } else if !t.writable {
return ErrTxNotWritable
}
@@ -159,10 +163,9 @@ func (t *Tx) Commit() error {
if t.managed {
panic("managed tx commit not allowed")
} else if t.db == nil {
- return nil
+ return ErrTxClosed
} else if !t.writable {
- t.Rollback()
- return nil
+ return ErrTxNotWritable
}
defer t.close()
@@ -196,22 +199,23 @@ func (t *Tx) Commit() error {
}
// Rollback closes the transaction and ignores all previous updates.
-func (t *Tx) Rollback() {
+func (t *Tx) Rollback() error {
if t.managed {
panic("managed tx rollback not allowed")
+ } else if t.db == nil {
+ return ErrTxClosed
}
t.close()
+ return nil
}
func (t *Tx) close() {
- if t.db != nil {
- if t.writable {
- t.db.rwlock.Unlock()
- } else {
- t.db.removeTx(t)
- }
- t.db = nil
+ if t.writable {
+ t.db.rwlock.Unlock()
+ } else {
+ t.db.removeTx(t)
}
+ t.db = nil
}
// allocate returns a contiguous block of memory starting at a given page.
@@ -433,7 +437,9 @@ func (t *Tx) forEachPage(pgid pgid, depth int, fn func(*page, int)) {
// Page returns page information for a given page number.
// This is only available from writable transactions.
func (t *Tx) Page(id int) (*PageInfo, error) {
- if !t.writable {
+ if t.db == nil {
+ return nil, ErrTxClosed
+ } else if !t.writable {
return nil, ErrTxNotWritable
} else if pgid(id) >= t.meta.pgid {
return nil, nil