//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") } tables := []string{ "im_group_settings", "im_group_members", "im_group_invitations", "im_group_join_requests", "im_group_announcements", "im_group_announcement_reads", "im_group_mutes", "im_group_qrcodes", "im_group_files", "im_group_admin_logs", "im_group_idempotency", "im_group_events_outbox", } for _, table := range tables { var count int err = db.QueryRow(`SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA=? AND TABLE_NAME=?`, schema, table).Scan(&count) if err != nil { fatal(err) } status := "missing" if count == 1 { status = "ok" } fmt.Printf("%s: %s\n", table, status) } } func fatal(v any) { fmt.Fprintln(os.Stderr, v) os.Exit(1) }