func stateConnect()

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
}