Files
scroll/bridge/cmd/db_client.go
2022-10-19 21:01:35 +08:00

89 lines
1.7 KiB
Go

package main
import (
"scroll-tech/bridge/config"
"github.com/jmoiron/sqlx"
"github.com/urfave/cli/v2"
"github.com/scroll-tech/go-ethereum/log"
"scroll-tech/database"
"scroll-tech/database/migrate"
)
func initDB(file string) (*sqlx.DB, error) {
cfg, err := config.NewConfig(file)
if err != nil {
return nil, err
}
dbCfg := cfg.DBConfig
factory, err := database.NewOrmFactory(dbCfg)
if err != nil {
return nil, err
}
log.Debug("Got db config from env", "driver name", dbCfg.DriverName, "dsn", dbCfg.DSN)
return factory.GetDB(), nil
}
// ResetDB clean or reset database.
func ResetDB(ctx *cli.Context) error {
db, err := initDB(ctx.String(configFileFlag.Name))
if err != nil {
return err
}
var version int64
err = migrate.Rollback(db.DB, &version)
if err != nil {
return err
}
log.Info("successful to reset", "init version", version)
return nil
}
// CheckDBStatus check db status
func CheckDBStatus(ctx *cli.Context) error {
db, err := initDB(ctx.String(configFileFlag.Name))
if err != nil {
return err
}
return migrate.Status(db.DB)
}
// DBVersion return the latest version
func DBVersion(ctx *cli.Context) error {
db, err := initDB(ctx.String(configFileFlag.Name))
if err != nil {
return err
}
version, err := migrate.Current(db.DB)
log.Info("show database version", "db version", version)
return err
}
// MigrateDB migrate db
func MigrateDB(ctx *cli.Context) error {
db, err := initDB(ctx.String(configFileFlag.Name))
if err != nil {
return err
}
return migrate.Migrate(db.DB)
}
// RollbackDB rollback db by version
func RollbackDB(ctx *cli.Context) error {
db, err := initDB(ctx.String(configFileFlag.Name))
if err != nil {
return err
}
version := ctx.Int64("version")
return migrate.Rollback(db.DB, &version)
}