//go:build ignore package main import ( "database/sql" "fmt" "os" "strings" _ "github.com/go-sql-driver/mysql" ) func main() { dsn := strings.TrimPrefix(os.Getenv("IM_MYSQL_DSN"), "mysql://") sqlFile := os.Getenv("IM_SQL_FILE") if dsn == "" || sqlFile == "" { fatal("IM_MYSQL_DSN and IM_SQL_FILE are required") } if !strings.Contains(dsn, "multiStatements=") { sep := "?" if strings.Contains(dsn, "?") { sep = "&" } dsn += sep + "multiStatements=true" } body, err := os.ReadFile(sqlFile) if err != nil { fatal(err) } db, err := sql.Open("mysql", dsn) if err != nil { fatal(err) } defer db.Close() if err = db.Ping(); err != nil { fatal(err) } if _, err = db.Exec(string(body)); err != nil { fatal(err) } fmt.Println("applied", sqlFile) } func fatal(v any) { fmt.Fprintln(os.Stderr, v) os.Exit(1) }