All checks were successful
Build / build (push) Successful in 1m13s
67 lines
1013 B
Go
67 lines
1013 B
Go
package mysqlite
|
|
|
|
import "log"
|
|
|
|
type Tx struct {
|
|
db *Db
|
|
}
|
|
|
|
func (d *Db) Begin() (*Tx, error) {
|
|
d.Lock()
|
|
err := d.query("BEGIN").Exec()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Tx{db: d}, nil
|
|
}
|
|
|
|
func (d *Db) MustBegin() *Tx {
|
|
tx, err := d.Begin()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return tx
|
|
}
|
|
|
|
func (tx *Tx) Commit() error {
|
|
defer tx.unlock()
|
|
return tx.Query("COMMIT").Exec()
|
|
}
|
|
|
|
func (tx *Tx) MustCommit() {
|
|
err := tx.Commit()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func (tx *Tx) Rollback() error {
|
|
if tx.db == nil {
|
|
// The transaction was already commited
|
|
return nil
|
|
}
|
|
defer tx.unlock()
|
|
return tx.Query("ROLLBACK").Exec()
|
|
}
|
|
|
|
func (tx *Tx) MustRollback() {
|
|
err := tx.Rollback()
|
|
if err != nil {
|
|
log.Panicf("error doing rollback: %v", err)
|
|
}
|
|
}
|
|
|
|
func (tx *Tx) unlock() {
|
|
if tx.db != nil {
|
|
tx.db.Unlock()
|
|
tx.db = nil
|
|
}
|
|
}
|
|
|
|
func (tx *Tx) Query(query string) *Query {
|
|
if tx.db == nil {
|
|
panic("query was performed on a transaction after Commit or Rollback")
|
|
}
|
|
return tx.db.query(query)
|
|
}
|