Added sub-transaction detection to WrapInTx

This commit is contained in:
Gerhard Gruber 2021-10-27 12:22:54 +02:00
parent 410393c804
commit 221f8963db

20
main.go
View File

@ -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