1
0
Fork 0
api_skeleton/subsys/db/conn.go

75 lines
1.5 KiB
Go
Raw Normal View History

2017-08-21 17:58:21 +09:00
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
}