Fix defer

This commit is contained in:
Lasse Hyldahl Jensen 2023-11-09 16:38:54 +01:00
parent 9010c20c20
commit ed7c462ecc

View File

@ -110,30 +110,20 @@ func (m Migrator) FullDataTypeOf(field *schema.Field) (expr clause.Expr) {
return return
} }
// AutoMigrate auto migrate values func (m Migrator) migrateTable(queryTx, execTx *gorm.DB, value interface{}) (err error) {
func (m Migrator) AutoMigrate(values ...interface{}) error { if err = execTx.Migrator().ObtainLock(); err != nil {
for _, value := range m.ReorderModels(values, true) { return
queryTx := m.DB.Session(&gorm.Session{})
execTx := queryTx
if m.DB.DryRun {
queryTx.DryRun = false
execTx = m.DB.Session(&gorm.Session{Logger: &printSQLLogger{Interface: m.DB.Logger}})
}
if err := execTx.Migrator().ObtainLock(); err != nil {
return err
} }
defer func() { defer func() {
err := execTx.Migrator().ReleaseLock() err = execTx.Migrator().ReleaseLock()
execTx.AddError(err)
}() }()
if !queryTx.Migrator().HasTable(value) { if !queryTx.Migrator().HasTable(value) {
if err := execTx.Migrator().CreateTable(value); err != nil { if err = execTx.Migrator().CreateTable(value); err != nil {
return err return err
} }
} else { } else {
if err := m.RunWithValue(value, func(stmt *gorm.Statement) error { if err = m.RunWithValue(value, func(stmt *gorm.Statement) error {
columnTypes, err := queryTx.Migrator().ColumnTypes(value) columnTypes, err := queryTx.Migrator().ColumnTypes(value)
if err != nil { if err != nil {
return err return err
@ -201,6 +191,22 @@ func (m Migrator) AutoMigrate(values ...interface{}) error {
return err return err
} }
} }
return nil
}
// AutoMigrate auto migrate values
func (m Migrator) AutoMigrate(values ...interface{}) error {
for _, value := range m.ReorderModels(values, true) {
queryTx := m.DB.Session(&gorm.Session{})
execTx := queryTx
if m.DB.DryRun {
queryTx.DryRun = false
execTx = m.DB.Session(&gorm.Session{Logger: &printSQLLogger{Interface: m.DB.Logger}})
}
if err := m.migrateTable(queryTx, execTx, value); err != nil {
return err
}
} }
return nil return nil