90 lines
2.4 KiB
Go
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)
|
|
}
|