mysqlite/transaction.go
Sebastiaan de Schaetzen 187ed5987d
All checks were successful
Build / build (push) Successful in 1m13s
Add update test
2025-03-16 11:04:21 +01:00

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)
}