From 76f6ead6b0c5bbdc6eaaf487a896e63e6ecf7bc6 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Sun, 23 Mar 2014 10:34:53 -0600 Subject: Mark Do()/With() transaction as managed. Transaction created from Do() and With() are now considered "managed". Managed transactions cannot be manually committed or rolled back since the Do() and With() functions provide that functionally automatically. Previously, a Tx could be manually committed and then any changes after that would be lost. --- tx.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'tx.go') diff --git a/tx.go b/tx.go index 181444e..c18fbf7 100644 --- a/tx.go +++ b/tx.go @@ -18,6 +18,7 @@ type txid uint64 // quickly grow. type Tx struct { writable bool + managed bool db *DB meta *meta buckets *buckets @@ -155,7 +156,9 @@ func (t *Tx) DeleteBucket(name string) error { // Commit writes all changes to disk and updates the meta page. // Returns an error if a disk write error occurs. func (t *Tx) Commit() error { - if t.db == nil { + if t.managed { + panic("managed tx commit not allowed") + } else if t.db == nil { return nil } else if !t.writable { t.Rollback() @@ -194,6 +197,9 @@ func (t *Tx) Commit() error { // Rollback closes the transaction and ignores all previous updates. func (t *Tx) Rollback() { + if t.managed { + panic("managed tx rollback not allowed") + } t.close() } -- cgit v1.2.3