Files
PriceForge/cmd/dbcheck/main.go
2026-03-07 23:11:42 +03:00

90 lines
2.4 KiB
Go

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)
}