package main import ( "database/sql" "encoding/json" "fmt" "os" "strings" _ "github.com/go-sql-driver/mysql" ) func main() { dsn := strings.TrimSpace(os.Getenv("MYSQL_DSN")) if dsn == "" { panic("MYSQL_DSN is required") } db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } defer db.Close() for _, table := range []string{ "vehicle_data_source", "vehicle_daily_mileage_source", "vehicle_daily_mileage", "vehicle", "vehicle_identifier", } { var name, ddl string if err := db.QueryRow("SHOW CREATE TABLE "+table).Scan(&name, &ddl); err != nil { panic(err) } fmt.Printf("=== %s ===\n%s\n", name, ddl) } rows, err := db.Query("SELECT * FROM vehicle_data_source WHERE id = 661200") if err != nil { panic(err) } defer rows.Close() columns, err := rows.Columns() if err != nil { panic(err) } if rows.Next() { values := make([]any, len(columns)) pointers := make([]any, len(columns)) for i := range values { pointers[i] = &values[i] } if err := rows.Scan(pointers...); err != nil { panic(err) } record := make(map[string]any, len(columns)) for i, column := range columns { switch value := values[i].(type) { case []byte: record[column] = string(value) default: record[column] = value } } data, _ := json.Marshal(record) fmt.Printf("=== source_661200 ===\n%s\n", data) } }