diff --git a/business/model/dao/dao.go b/business/model/dao/dao.go index 45b709866..610153e7b 100644 --- a/business/model/dao/dao.go +++ b/business/model/dao/dao.go @@ -14,7 +14,8 @@ const ( ) type DaoDB struct { - db orm.Ormer + transactionLevel int + db orm.Ormer } // func GetRows(db *gorm.DB, inPtr interface{}, sql string, values ...interface{}) (err error) { @@ -62,16 +63,28 @@ func WrapDB(ormDb orm.Ormer) *DaoDB { return &DaoDB{db: ormDb} } -func Begin(db *DaoDB) error { - return db.db.Begin() +func Begin(db *DaoDB) (err error) { + if db.transactionLevel == 0 { + err = db.db.Begin() + } + db.transactionLevel++ + return err } -func Commit(db *DaoDB) error { - return db.db.Commit() +func Commit(db *DaoDB) (err error) { + if db.transactionLevel <= 1 { + err = db.db.Commit() + db.transactionLevel = 0 + } else { + db.transactionLevel-- + } + return err } -func Rollback(db *DaoDB) error { - return db.db.Rollback() +func Rollback(db *DaoDB) (err error) { + err = db.db.Rollback() + db.transactionLevel = 0 + return err } func GetRow(db *DaoDB, inPtr interface{}, sql string, values ...interface{}) (err error) {