package main import ( "database/sql" "flag" "fmt" "os" "strings" "git.mchus.pro/mchus/priceforge/internal/appstate" "git.mchus.pro/mchus/priceforge/internal/config" _ "github.com/go-sql-driver/mysql" ) func main() { configPathFlag := flag.String("config", "", "path to config file") flag.Parse() configPath, err := appstate.ResolveConfigPath(strings.TrimSpace(*configPathFlag)) if err != nil { fatalf("resolve config path: %v", err) } cfg, err := config.Load(configPath) if err != nil { fatalf("load config: %v", err) } db, err := sql.Open("mysql", cfg.Database.DSN()) if err != nil { fatalf("open database: %v", err) } defer db.Close() columnQuery := ` SELECT column_name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'qt_schema_migrations' ORDER BY ordinal_position ` columns, err := db.Query(columnQuery) if err != nil { fatalf("query migration columns: %v", err) } var migrationColumns []string for columns.Next() { var column string if err := columns.Scan(&column); err != nil { fatalf("scan migration column: %v", err) } migrationColumns = append(migrationColumns, column) } _ = columns.Close() fmt.Printf("qt_schema_migrations columns => %s\n", strings.Join(migrationColumns, ",")) migrationNameColumn := "name" for _, column := range migrationColumns { if strings.EqualFold(column, "version") { migrationNameColumn = column break } if strings.EqualFold(column, "filename") { migrationNameColumn = column break } if strings.EqualFold(column, "name") { migrationNameColumn = column } } checks := []string{ fmt.Sprintf("SELECT EXISTS(SELECT 1 FROM qt_schema_migrations WHERE %s='032_drop_legacy_vendor_mapping_tables.sql')", migrationNameColumn), `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'lot_partnumbers'`, `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'qt_lot_bundles'`, `SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'qt_lot_bundle_items'`, `SELECT COUNT(*) FROM qt_partnumber_book_items`, } for _, q := range checks { var value any if err := db.QueryRow(q).Scan(&value); err != nil { fatalf("query failed: %s: %v", q, err) } fmt.Printf("%s => %v\n", q, value) } } func fatalf(format string, args ...any) { fmt.Fprintf(os.Stderr, format+"\n", args...) os.Exit(1) }