github.com/ztalab/ZACA@v0.0.1/database/mysql/migration.go (about)

     1  package mysql
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/golang-migrate/migrate/v4"
     7  	"github.com/golang-migrate/migrate/v4/database/mysql"
     8  	_ "github.com/golang-migrate/migrate/v4/source/file"
     9  	"github.com/ztalab/ZACA/pkg/logger"
    10  	_ "gorm.io/driver/mysql"
    11  	"gorm.io/gorm"
    12  )
    13  
    14  func Migrate(db *gorm.DB) error {
    15  	lo := logger.Named("migration")
    16  	sql, err := db.DB()
    17  	if err != nil {
    18  		return fmt.Errorf("failed to get DB instance: %v", err)
    19  	}
    20  	driver, err := mysql.WithInstance(sql, &mysql.Config{})
    21  	m, err := migrate.NewWithDatabaseInstance(
    22  		"file://database/mysql/migrations/",
    23  		"mysql", driver)
    24  	if err != nil {
    25  		return fmt.Errorf("migrate instance error: %v", err)
    26  	}
    27  	if err = m.Up(); err != nil {
    28  		if err == migrate.ErrNoChange {
    29  			lo.Info("no changes.")
    30  			return nil
    31  		}
    32  		return fmt.Errorf("MySQL migration exception: %v", err)
    33  	}
    34  	lo.Info("Migrations success.")
    35  	return nil
    36  }