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

View File

@ -687,7 +687,7 @@ func TestUniqueColumn(t *testing.T) {
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_2"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_2"))
AssertEqual(t, false, DB.Migrator().HasIndex(&UniqueTest{}, "name_3"))
type UniqueTest2 struct {
ID string `gorm:"primary_key"`
@ -712,5 +712,5 @@ func TestUniqueColumn(t *testing.T) {
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_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 {
if val == "" || !strings.EqualFold(val, "NULL") {
if val == "" || strings.EqualFold(val, "NULL") {
return true
}
return false