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  }