53 lines
912 B
Go
53 lines
912 B
Go
|
package storm
|
||
|
|
||
|
import bolt "go.etcd.io/bbolt"
|
||
|
|
||
|
// Tx is a transaction.
|
||
|
type Tx interface {
|
||
|
// Commit writes all changes to disk.
|
||
|
Commit() error
|
||
|
|
||
|
// Rollback closes the transaction and ignores all previous updates.
|
||
|
Rollback() error
|
||
|
}
|
||
|
|
||
|
// Begin starts a new transaction.
|
||
|
func (n node) Begin(writable bool) (Node, error) {
|
||
|
var err error
|
||
|
|
||
|
n.tx, err = n.s.Bolt.Begin(writable)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &n, nil
|
||
|
}
|
||
|
|
||
|
// Rollback closes the transaction and ignores all previous updates.
|
||
|
func (n *node) Rollback() error {
|
||
|
if n.tx == nil {
|
||
|
return ErrNotInTransaction
|
||
|
}
|
||
|
|
||
|
err := n.tx.Rollback()
|
||
|
if err == bolt.ErrTxClosed {
|
||
|
return ErrNotInTransaction
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Commit writes all changes to disk.
|
||
|
func (n *node) Commit() error {
|
||
|
if n.tx == nil {
|
||
|
return ErrNotInTransaction
|
||
|
}
|
||
|
|
||
|
err := n.tx.Commit()
|
||
|
if err == bolt.ErrTxClosed {
|
||
|
return ErrNotInTransaction
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|