fix: donot alter column if field default value in db or schema both null
This commit is contained in:
parent
23f194ad59
commit
ce8318927d
@ -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 {
|
||||||
|
@ -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"))
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user