Added sub-transaction detection to WrapInTx
This commit is contained in:
parent
410393c804
commit
221f8963db
20
main.go
20
main.go
@ -523,14 +523,20 @@ func (s *DB) Rollback() *DB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WrapInTx wraps a method in a transaction
|
// WrapInTx wraps a method in a transaction
|
||||||
func (s *DB) WrapInTx(f func(tx *DB) (error)) error {
|
func (s *DB) WrapInTx(f func(tx *DB) error) error {
|
||||||
tx := s.Begin()
|
if _, ok := s.db.(*sql.Tx); ok {
|
||||||
if err := f(tx); err != nil {
|
// Already in a transaction
|
||||||
tx.Rollback()
|
return f(s)
|
||||||
return err
|
} else {
|
||||||
|
// Lets start a new transaction
|
||||||
|
tx := s.Begin()
|
||||||
|
if err := f(tx); err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tx.Commit()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
tx.Commit()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SkipAssocSave disables saving of associations
|
// SkipAssocSave disables saving of associations
|
||||||
|
Loading…
x
Reference in New Issue
Block a user