pink_fox/application/packages/fw/migration.go

76 lines
1.4 KiB
Go

package fw
import (
"context"
"database/sql"
"fmt"
"github.com/pressly/goose/v3"
)
func MigrateUp(db *sql.DB, dir string, disableLogger bool) Error {
if disableLogger {
goose.SetLogger(goose.NopLogger())
}
err := goose.Up(db, dir)
if err != nil {
return Err(err)
}
return nil
}
func MigrateDown(conn *sql.DB, migrationPath string) Error {
err := goose.Down(conn, migrationPath)
if err != nil {
return Err(err)
}
return nil
}
func MigrateCreate(migrationPath, migrationName string) Error {
ctx := context.Background()
err := goose.RunContext(ctx, "create", nil, migrationPath, migrationName, "sql")
if err != nil {
return Err(err)
}
return nil
}
func DropAppTable(db *sql.DB, dbName string) Error {
rows, err := db.Query(`
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public' AND table_type = 'BASE TABLE' AND table_catalog = $1
`, dbName)
if err != nil {
return Err(err)
}
defer func() {
_ = rows.Close()
}()
var tables []string
for rows.Next() {
var tableName string
if err = rows.Scan(&tableName); err != nil {
return Err(err)
}
tables = append(tables, tableName)
}
defer func() {
_ = rows.Close()
}()
if err = rows.Err(); err != nil {
return Err(err)
}
for _, table := range tables {
_, err = db.Exec(fmt.Sprintf("DROP TABLE IF EXISTS %s", table))
if err != nil {
return Err(fmt.Errorf("error drop %s: %v", table, err))
}
}
return nil
}