fix: tag defalut NULL and default not set should be same

This commit is contained in:
a631807682 2022-05-08 17:35:46 +08:00
parent 19b8d37ae8
commit c42089d0b0
No known key found for this signature in database
GPG Key ID: 137D1D75522168AB
3 changed files with 63 additions and 1 deletions

View File

@ -11,6 +11,7 @@ import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/gorm/schema"
"gorm.io/gorm/utils"
)
var (
@ -448,7 +449,8 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
}
// check default value
if v, ok := columnType.DefaultValue(); ok && v != field.DefaultValue {
if v, ok := columnType.DefaultValue(); ok &&
utils.CheckColumnDefaultNull(v) != utils.CheckColumnDefaultNull(field.DefaultValue) {
// not primary key
if !field.PrimaryKey {
alterColumn = true

View File

@ -657,3 +657,56 @@ func TestMigrateWithSpecialName(t *testing.T) {
AssertEqual(t, true, DB.Migrator().HasTable("coupon_product_1"))
AssertEqual(t, true, DB.Migrator().HasTable("coupon_product_2"))
}
func TestUniqueColumn(t *testing.T) {
type UniqueTest struct {
ID string `gorm:"primary_key"`
Name string `gorm:"unique"`
}
var err error
err = DB.Migrator().DropTable(&UniqueTest{})
if err != nil {
t.Errorf("DropTable err:%v", err)
}
err = DB.AutoMigrate(&UniqueTest{})
if err != nil {
t.Fatalf("AutoMigrate err:%v", err)
}
err = DB.AutoMigrate(&UniqueTest{})
if err != nil {
t.Fatalf("AutoMigrate err:%v", err)
}
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"))
type UniqueTest2 struct {
ID string `gorm:"primary_key"`
Name string `gorm:"unique;default:NULL"`
}
err = DB.Migrator().DropTable(&UniqueTest2{})
if err != nil {
t.Errorf("DropTable err:%v", err)
}
err = DB.AutoMigrate(&UniqueTest2{})
if err != nil {
t.Fatalf("AutoMigrate err:%v", err)
}
err = DB.AutoMigrate(&UniqueTest2{})
if err != nil {
t.Fatalf("AutoMigrate err:%v", err)
}
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"))
}

View File

@ -46,6 +46,13 @@ func CheckTruth(vals ...string) bool {
return false
}
func CheckColumnDefaultNull(val string) bool {
if val == "" || !strings.EqualFold(val, "NULL") {
return true
}
return false
}
func ToStringKey(values ...interface{}) string {
results := make([]string, len(values))