diff options
Diffstat (limited to 'tx.go')
-rw-r--r-- | tx.go | 34 |
1 files changed, 20 insertions, 14 deletions
@@ -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 |