package db import ( "errors" "fmt" "amuz.es/gogs/infra/rooibos/util" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" errs "github.com/pkg/errors" ) var ( db *sqlx.DB = nil logger = util.NewLogger("sql") ) func InitDB(config *util.DbConfig) { connectStr := fmt.Sprintf( "%s:%s@%s(%s:%d)/%s?%s", config.User, config.Password, config.Network, config.Host, config.Port, config.DB, config.Args) logger.Debugf("connect to %s@%s(%s:%d)/%s?%s", config.User, config.Network, config.Host, config.Port, config.DB, config.Args) if conn, err := sqlx.Connect(config.Driver, connectStr); err != nil { panic(errs.Wrap(err, "failed to connect db")) } else { db = conn //https://github.com/go-sql-driver/mysql/issues/257 무조건 0 db.SetMaxIdleConns(0) db.SetMaxOpenConns(25) logger.Info("DB connected") prepareSqls() } } func prepareSqls() { memberPrepare() } func Begin() (tx *sqlx.Tx, err error) { tx, err = db.Beginx() return } func prepareSql(sql string) (*sqlx.Stmt, error) { if stmt, err := db.Preparex(sql); err != nil { return nil, errs.Wrapf(err, "failed to prepare sql %s", sql) } else { return stmt, nil } } func tablecheck(tablename string) error { var fetched int if db.Get( &fetched, ` SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ?`, tablename) != nil || fetched != 1 { return errors.New(fmt.Sprintf("table %s not exist", tablename)) } return nil }