in internal/database/mysql/mysql.go [40:91]
func (h mysqlHandler) CreateCloudSQLPool(cfg config.DatabaseConfig) (*sql.DB, error) {
mustGetenv := func(k string, cfg config.DatabaseConfig) string {
v := ""
switch k {
case "user_name":
v = cfg.User
case "password":
v = cfg.Password
case "database_name":
v = cfg.DBName
case "instance_name":
v = cfg.CloudSQLInstanceConnectionName
case "PRIVATE_IP":
if cfg.UsePrivateIP {
v = "true"
}
}
if v == "" {
return os.Getenv(k)
}
return v
}
dbUser := mustGetenv("user_name", cfg)
dbPwd := mustGetenv("password", cfg)
dbName := mustGetenv("database_name", cfg)
instanceConnectionName := mustGetenv("instance_name", cfg)
usePrivate := mustGetenv("PRIVATE_IP", cfg)
d, err := cloudsqlconn.NewDialer(context.Background())
if err != nil {
return nil, fmt.Errorf("cloudsqlconn.NewDialer: %w", err)
}
var opts []cloudsqlconn.DialOption
if usePrivate != "" && strings.ToLower(usePrivate) != "false" && usePrivate != "0" {
opts = append(opts, cloudsqlconn.WithPrivateIP())
}
mysql.RegisterDialContext("cloudsqlconn",
func(ctx context.Context, addr string) (net.Conn, error) {
return d.Dial(ctx, instanceConnectionName, opts...)
})
dbURI := fmt.Sprintf("%s:%s@cloudsqlconn(localhost:3306)/%s?parseTime=true",
dbUser, dbPwd, dbName)
dbPool, err := sql.Open("mysql", dbURI)
if err != nil {
return nil, fmt.Errorf("sql.Open: %w", err)
}
return dbPool, nil
}