// RunTx creates a transaction context and runs fn within it. func RunTx(d sqlbuilder.Database, fn func(tx sqlbuilder.Tx) error) error { tx, err := d.NewTx() if err != nil { return err } defer tx.Close() if err := fn(tx); err != nil { tx.Rollback() return err } return tx.Commit() }