github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgSql/deprecated.go (about) 1 package kmgSql 2 3 import ( 4 "fmt" 5 6 "github.com/bronze1man/kmg/kmgConfig" 7 "github.com/go-sql-driver/mysql" 8 ) 9 10 // @deprecated 11 func GetDbConfigFromConfig(p *kmgConfig.Parameter) *DbConfig { 12 return &DbConfig{ 13 Username: p.DatabaseUsername, 14 Password: p.DatabasePassword, 15 Host: p.DatabaseHost, 16 DbName: p.DatabaseDbName, 17 } 18 } 19 20 // @deprecated 21 type TransactionableDb interface { 22 Begin() error 23 Commit() error 24 Rollback() error 25 } 26 27 // @deprecated 28 //transaction callback on beego.orm,but not depend on it 29 // 有可能会多次运行 30 func TransactionCallback(db TransactionableDb, f func() error) (err error) { 31 for i := 0; i < 3; i++ { 32 err = runTransaction(db, f) 33 mysqlErr, ok := err.(*mysql.MySQLError) 34 if ok && mysqlErr.Number == 1213 { 35 //1213 错误可以重试解决 36 continue 37 } 38 return err 39 } 40 return err 41 } 42 43 // @deprecated 44 func runTransaction(db TransactionableDb, f func() error) error { 45 hasFinish := false 46 defer func() { //panic的时候处理 47 if !hasFinish { 48 db.Rollback() 49 //不用recover,让异常继续向上传递 50 } 51 }() 52 err := db.Begin() 53 if err != nil { 54 return err 55 } 56 err = f() 57 if err != nil { 58 errR := db.Rollback() 59 hasFinish = true 60 if errR != nil { 61 return fmt.Errorf("rollback fail:%s,origin fail:%s", errR.Error(), err.Error()) 62 } 63 return err 64 } 65 err = db.Commit() 66 if err != nil { 67 return err 68 } 69 hasFinish = true 70 return nil 71 }