@@ -279,31 +279,35 @@ func (m Migrator) AlterColumn(value interface{}, field string) error {
279
279
}
280
280
}
281
281
282
- fileType := clause.Expr {SQL : m .DataTypeOf (field )}
283
- if fieldColumnType .DatabaseTypeName () != fileType .SQL {
284
- filedColumnAutoIncrement , _ := fieldColumnType .AutoIncrement ()
285
- if field .AutoIncrement && filedColumnAutoIncrement { // update
286
- serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
287
- if t , _ := fieldColumnType .ColumnType (); t != serialDatabaseType {
288
- if err := m .UpdateSequence (m .DB , stmt , field , serialDatabaseType ); err != nil {
282
+ return m .DB .Connection (func (tx * gorm.DB ) error {
283
+ fileType := clause.Expr {SQL : m .DataTypeOf (field )}
284
+ if fieldColumnType .DatabaseTypeName () != fileType .SQL {
285
+ filedColumnAutoIncrement , _ := fieldColumnType .AutoIncrement ()
286
+ if field .AutoIncrement && filedColumnAutoIncrement { // update
287
+ serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
288
+ if t , _ := fieldColumnType .ColumnType (); t != serialDatabaseType {
289
+ if err := m .UpdateSequence (tx , stmt , field , serialDatabaseType ); err != nil {
290
+ return err
291
+ }
292
+ }
293
+ } else if field .AutoIncrement && ! filedColumnAutoIncrement { // create
294
+ serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
295
+ if err := m .CreateSequence (tx , stmt , field , serialDatabaseType ); err != nil {
296
+ return err
297
+ }
298
+ } else if ! field .AutoIncrement && filedColumnAutoIncrement { // delete
299
+ if err := m .DeleteSequence (tx , stmt , field , fileType ); err != nil {
300
+ return err
301
+ }
302
+ } else {
303
+ if err := tx .Exec ("ALTER TABLE ? ALTER COLUMN ? TYPE ? USING ?::?" ,
304
+ m .CurrentTable (stmt ), clause.Column {Name : field .DBName }, fileType , clause.Column {Name : field .DBName }, fileType ).Error ; err != nil {
289
305
return err
290
306
}
291
- }
292
- } else if field .AutoIncrement && ! filedColumnAutoIncrement { // create
293
- serialDatabaseType , _ := getSerialDatabaseType (fileType .SQL )
294
- if err := m .CreateSequence (m .DB , stmt , field , serialDatabaseType ); err != nil {
295
- return err
296
- }
297
- } else if ! field .AutoIncrement && filedColumnAutoIncrement { // delete
298
- if err := m .DeleteSequence (m .DB , stmt , field , fileType ); err != nil {
299
- return err
300
- }
301
- } else {
302
- if err := m .DB .Exec ("ALTER TABLE ? ALTER COLUMN ? TYPE ?" , m .CurrentTable (stmt ), clause.Column {Name : field .DBName }, fileType ).Error ; err != nil {
303
- return err
304
307
}
305
308
}
306
- }
309
+ return nil
310
+ })
307
311
308
312
if null , _ := fieldColumnType .Nullable (); null == field .NotNull {
309
313
if field .NotNull {
@@ -691,4 +695,4 @@ func groupByIndexName(indexList []*Index) map[string][]*Index {
691
695
692
696
func (m Migrator ) GetTypeAliases (databaseTypeName string ) []string {
693
697
return typeAliasMap [databaseTypeName ]
694
- }
698
+ }
0 commit comments