Skip to content

Commit

Permalink
fix: migrator run with nil schema (#119)
Browse files Browse the repository at this point in the history
  • Loading branch information
black-06 authored May 19, 2023
1 parent 3715c13 commit 0bfe86f
Showing 1 changed file with 35 additions and 29 deletions.
64 changes: 35 additions & 29 deletions migrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,18 @@ func (m Migrator) FullDataTypeOf(field *schema.Field) clause.Expr {

func (m Migrator) AlterColumn(value interface{}, field string) error {
return m.RunWithValue(value, func(stmt *gorm.Statement) error {
if field := stmt.Schema.LookUpField(field); field != nil {
fullDataType := m.FullDataTypeOf(field)
if m.Dialector.DontSupportRenameColumnUnique {
fullDataType.SQL = strings.Replace(fullDataType.SQL, " UNIQUE ", " ", 1)
}
if stmt.Schema != nil {
if field := stmt.Schema.LookUpField(field); field != nil {
fullDataType := m.FullDataTypeOf(field)
if m.Dialector.DontSupportRenameColumnUnique {
fullDataType.SQL = strings.Replace(fullDataType.SQL, " UNIQUE ", " ", 1)
}

return m.DB.Exec(
"ALTER TABLE ? MODIFY COLUMN ? ?",
clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, fullDataType,
).Error
return m.DB.Exec(
"ALTER TABLE ? MODIFY COLUMN ? ?",
clause.Table{Name: stmt.Table}, clause.Column{Name: field.DBName}, fullDataType,
).Error
}
}
return fmt.Errorf("failed to look up field with name: %s", field)
})
Expand Down Expand Up @@ -101,14 +103,16 @@ func (m Migrator) RenameColumn(value interface{}, oldName, newName string) error
}

var field *schema.Field
if f := stmt.Schema.LookUpField(oldName); f != nil {
oldName = f.DBName
field = f
}
if stmt.Schema != nil {
if f := stmt.Schema.LookUpField(oldName); f != nil {
oldName = f.DBName
field = f
}

if f := stmt.Schema.LookUpField(newName); f != nil {
newName = f.DBName
field = f
if f := stmt.Schema.LookUpField(newName); f != nil {
newName = f.DBName
field = f
}
}

if field != nil {
Expand Down Expand Up @@ -139,22 +143,24 @@ func (m Migrator) RenameIndex(value interface{}, oldName, newName string) error
return err
}

if idx := stmt.Schema.LookIndex(newName); idx == nil {
if idx = stmt.Schema.LookIndex(oldName); idx != nil {
opts := m.BuildIndexOptions(idx.Fields, stmt)
values := []interface{}{clause.Column{Name: newName}, clause.Table{Name: stmt.Table}, opts}
if stmt.Schema != nil {
if idx := stmt.Schema.LookIndex(newName); idx == nil {
if idx = stmt.Schema.LookIndex(oldName); idx != nil {
opts := m.BuildIndexOptions(idx.Fields, stmt)
values := []interface{}{clause.Column{Name: newName}, clause.Table{Name: stmt.Table}, opts}

createIndexSQL := "CREATE "
if idx.Class != "" {
createIndexSQL += idx.Class + " "
}
createIndexSQL += "INDEX ? ON ??"
createIndexSQL := "CREATE "
if idx.Class != "" {
createIndexSQL += idx.Class + " "
}
createIndexSQL += "INDEX ? ON ??"

if idx.Type != "" {
createIndexSQL += " USING " + idx.Type
}
if idx.Type != "" {
createIndexSQL += " USING " + idx.Type
}

return m.DB.Exec(createIndexSQL, values...).Error
return m.DB.Exec(createIndexSQL, values...).Error
}
}
}

Expand Down

0 comments on commit 0bfe86f

Please sign in to comment.