//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://") if dsn == "" { fatal("IM_MYSQL_DSN is required") } db, err := sql.Open("mysql", dsn) if err != nil { fatal(err) } defer db.Close() if err = db.Ping(); err != nil { fatal(err) } var schema string if err = db.QueryRow("SELECT DATABASE()").Scan(&schema); err != nil { fatal(err) } if strings.TrimSpace(schema) == "" { fatal("IM_MYSQL_DSN must select a tenant database") } raw, err := os.ReadFile("docs/IM-群聊业务表设计.sql") if err != nil { fatal(err) } sqlText := stripSQLLineComments(string(raw)) for _, stmt := range strings.Split(sqlText, ";") { stmt = strings.TrimSpace(stmt) if stmt == "" { continue } if _, err = db.Exec(stmt); err != nil { fatal(fmt.Errorf("exec failed: %s: %w", stmt, err)) } } fmt.Printf("group business tables applied to %s\n", schema) } func stripSQLLineComments(text string) string { var lines []string for _, line := range strings.Split(text, "\n") { if strings.HasPrefix(strings.TrimSpace(line), "--") { continue } lines = append(lines, line) } return strings.Join(lines, "\n") } func fatal(v any) { fmt.Fprintln(os.Stderr, v) os.Exit(1) }