//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://") query := os.Getenv("IM_SQL_QUERY") if dsn == "" || query == "" { fatal("IM_MYSQL_DSN and IM_SQL_QUERY are required") } db, err := sql.Open("mysql", dsn) if err != nil { fatal(err) } defer db.Close() rows, err := db.Query(query) if err != nil { fatal(err) } defer rows.Close() cols, err := rows.Columns() if err != nil { fatal(err) } fmt.Println(strings.Join(cols, "\t")) for rows.Next() { values := make([]sql.NullString, len(cols)) scan := make([]any, len(cols)) for i := range values { scan[i] = &values[i] } if err := rows.Scan(scan...); err != nil { fatal(err) } out := make([]string, len(cols)) for i, value := range values { if value.Valid { out[i] = value.String } } fmt.Println(strings.Join(out, "\t")) } if err := rows.Err(); err != nil { fatal(err) } } func fatal(v any) { fmt.Fprintln(os.Stderr, v) os.Exit(1) }