in config/mysql.go [48:87]
func stateConnect(s string, db string) (*sql.DB, error) {
if s == "" {
return nil, nil
}
// url.Parse requires scheme in the beginning of the URL, just prepend
// with random scheme if it wasn't in the config file URL
if !strings.Contains(s, "://") {
s = "dsn://" + s
}
u, err := url.Parse(s)
if err != nil {
return nil, err
}
var host, port string = u.Host, ""
if strings.Contains(u.Host, ":") {
host, port, err = net.SplitHostPort(u.Host)
if err != nil {
return nil, err
}
}
if u.User.Username() == "" || host == "" {
return nil, fmt.Errorf("host and username required in state connect URL")
}
if port == "" {
port = "3306"
}
uport, err := strconv.ParseUint(port, 10, 16)
if err != nil {
return nil, err
}
pwd, _ := u.User.Password()
conn, err := sql.Open("mysql", fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", u.User.Username(), pwd, host, uport, db))
if err != nil {
return nil, err
}
if err = conn.Ping(); err != nil {
return nil, err
}
return conn, err
}