fix: donot alter column if field default value in db or schema both null

This commit is contained in:
a631807682 2022-05-08 18:14:31 +08:00
parent 23f194ad59
commit ce8318927d
No known key found for this signature in database
GPG Key ID: 137D1D75522168AB
3 changed files with 10 additions and 8 deletions

View File

@ -449,13 +449,15 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
} }
// check default value // check default value
if v, ok := columnType.DefaultValue(); ok && if v, ok := columnType.DefaultValue(); ok && v != field.DefaultValue {
utils.CheckColumnDefaultNull(v) != utils.CheckColumnDefaultNull(field.DefaultValue) { // not all equal null
if !(utils.CheckColumnDefaultNull(v) && utils.CheckColumnDefaultNull(field.DefaultValue)) {
// not primary key // not primary key
if !field.PrimaryKey { if !field.PrimaryKey {
alterColumn = true alterColumn = true
} }
} }
}
// check comment // check comment
if comment, ok := columnType.Comment(); ok && comment != field.Comment { if comment, ok := columnType.Comment(); ok && comment != field.Comment {

View File

@ -687,7 +687,7 @@ func TestUniqueColumn(t *testing.T) {
AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest{}, "name")) AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest{}, "name"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_1")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_1"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_3"))
type UniqueTest2 struct { type UniqueTest2 struct {
ID string `gorm:"primary_key"` ID string `gorm:"primary_key"`
@ -712,5 +712,5 @@ func TestUniqueColumn(t *testing.T) {
AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest2{}, "name")) AssertEqual(t, true, DB.Migrator().HasIndex(&UniqueTest2{}, "name"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_1")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_1"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_2")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_2"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_2")) AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest2{}, "name_3"))
} }

View File

@ -47,7 +47,7 @@ func CheckTruth(vals ...string) bool {
} }
func CheckColumnDefaultNull(val string) bool { func CheckColumnDefaultNull(val string) bool {
if val == "" || !strings.EqualFold(val, "NULL") { if val == "" || strings.EqualFold(val, "NULL") {
return true return true
} }
return false return false