package driver import ( "fmt" "git.unkin.net/unkin/waitfordb/internal/config" "github.com/go-sql-driver/mysql" ) func init() { register(mysqlDriver{}) } type mysqlDriver struct{} func (mysqlDriver) Name() string { return "mysql" } func (mysqlDriver) Open(cfg config.Config) (Pinger, error) { dsn := cfg.DSN if dsn == "" { dsn = mysqlDSN(cfg) } return openSQL("mysql", dsn) } // mysqlDSN builds a driver-native DSN via mysql.Config so credentials and the // address are escaped correctly. func mysqlDSN(cfg config.Config) string { c := mysql.NewConfig() c.User = cfg.User c.Passwd = cfg.Password c.Net = "tcp" c.Addr = fmt.Sprintf("%s:%s", cfg.Host, cfg.Port) c.DBName = cfg.Database c.Timeout = cfg.ConnectTimeout return c.FormatDSN() }