Generate unique savepoint names
This commit is contained in:
parent
0daaf1747c
commit
dcd930b538
@ -4,6 +4,7 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"hash/maphash"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -623,14 +624,15 @@ func (db *DB) Transaction(fc func(tx *DB) error, opts ...*sql.TxOptions) (err er
|
|||||||
if committer, ok := db.Statement.ConnPool.(TxCommitter); ok && committer != nil {
|
if committer, ok := db.Statement.ConnPool.(TxCommitter); ok && committer != nil {
|
||||||
// nested transaction
|
// nested transaction
|
||||||
if !db.DisableNestedTransaction {
|
if !db.DisableNestedTransaction {
|
||||||
err = db.SavePoint(fmt.Sprintf("sp%p", fc)).Error
|
spID := new(maphash.Hash).Sum64()
|
||||||
|
err = db.SavePoint(fmt.Sprintf("sp%d", spID)).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
// Make sure to rollback when panic, Block error or Commit error
|
// Make sure to rollback when panic, Block error or Commit error
|
||||||
if panicked || err != nil {
|
if panicked || err != nil {
|
||||||
db.RollbackTo(fmt.Sprintf("sp%p", fc))
|
db.RollbackTo(fmt.Sprintf("sp%d", spID))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user