mirror of https://github.com/go-gorm/gorm.git
Allow temporarily disable default transaction
This commit is contained in:
parent
e83e210971
commit
b8692c7671
|
@ -5,6 +5,7 @@ import (
|
|||
)
|
||||
|
||||
func BeginTransaction(db *gorm.DB) {
|
||||
if !db.Config.SkipDefaultTransaction {
|
||||
if tx := db.Begin(); tx.Error == nil {
|
||||
db.Statement.ConnPool = tx.Statement.ConnPool
|
||||
db.InstanceSet("gorm:started_transaction", true)
|
||||
|
@ -12,8 +13,10 @@ func BeginTransaction(db *gorm.DB) {
|
|||
tx.Error = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func CommitOrRollbackTransaction(db *gorm.DB) {
|
||||
if !db.Config.SkipDefaultTransaction {
|
||||
if _, ok := db.InstanceGet("gorm:started_transaction"); ok {
|
||||
if db.Error == nil {
|
||||
db.Commit()
|
||||
|
@ -23,3 +26,4 @@ func CommitOrRollbackTransaction(db *gorm.DB) {
|
|||
db.Statement.ConnPool = db.ConnPool
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
5
gorm.go
5
gorm.go
|
@ -60,6 +60,7 @@ type Session struct {
|
|||
DryRun bool
|
||||
PrepareStmt bool
|
||||
WithConditions bool
|
||||
SkipDefaultTransaction bool
|
||||
Context context.Context
|
||||
Logger logger.Interface
|
||||
NowFunc func() time.Time
|
||||
|
@ -145,6 +146,10 @@ func (db *DB) Session(config *Session) *DB {
|
|||
}
|
||||
)
|
||||
|
||||
if config.SkipDefaultTransaction {
|
||||
tx.Config.SkipDefaultTransaction = true
|
||||
}
|
||||
|
||||
if config.Context != nil {
|
||||
tx.Statement = tx.Statement.clone()
|
||||
tx.Statement.DB = tx
|
||||
|
|
Loading…
Reference in New Issue