|
@@ -78,11 +78,19 @@ func Transaction(executor Executor, txFunc func(tx Executor) error) error {
|
|
|
switch e := executor.(type) {
|
|
switch e := executor.(type) {
|
|
|
case *operations.Operations:
|
|
case *operations.Operations:
|
|
|
tx := e.BeginTransaction()
|
|
tx := e.BeginTransaction()
|
|
|
|
|
+
|
|
|
|
|
+ defer func() {
|
|
|
|
|
+ if r := recover(); r != nil {
|
|
|
|
|
+ tx.RollbackTransaction()
|
|
|
|
|
+ }
|
|
|
|
|
+ }()
|
|
|
|
|
+
|
|
|
err := txFunc(tx)
|
|
err := txFunc(tx)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
tx.RollbackTransaction()
|
|
tx.RollbackTransaction()
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
tx.CommitTransaction()
|
|
tx.CommitTransaction()
|
|
|
default:
|
|
default:
|
|
|
return nil
|
|
return nil
|