Skip to content

Commit 1d1e772

Browse files
committed
Fix look up field from DDL
1 parent e61d1dd commit 1d1e772

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

migrator.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,18 @@ func (m Migrator) AlterColumn(value interface{}, name string) error {
8080
return m.RunWithoutForeignKey(func() error {
8181
return m.recreateTable(value, nil, func(rawDDL string, stmt *gorm.Statement) (sql string, sqlArgs []interface{}, err error) {
8282
if field := stmt.Schema.LookUpField(name); field != nil {
83-
reg, err := regexp.Compile("(`|'|\"| )" + field.DBName + "(`|'|\"| ) .*?(,|\\))")
83+
// lookup field from table definition, ddl might looks like `'name' int,` or `'name' int)`
84+
reg, err := regexp.Compile("(`|'|\"| )" + field.DBName + "(`|'|\"| ) .*?(,|\\)\\s*$)")
8485
if err != nil {
8586
return "", nil, err
8687
}
8788

8889
createSQL := reg.ReplaceAllString(rawDDL, fmt.Sprintf("`%v` ?$3", field.DBName))
8990

91+
if createSQL == rawDDL {
92+
return "", nil, fmt.Errorf("failed to look up field %v from DDL %v", field.DBName, rawDDL)
93+
}
94+
9095
return createSQL, []interface{}{m.FullDataTypeOf(field)}, nil
9196
}
9297
return "", nil, fmt.Errorf("failed to alter field with name %v", name)

0 commit comments

Comments
 (0)