fix: tag defalut NULL and default not set should be same
This commit is contained in:
parent
19b8d37ae8
commit
c42089d0b0
@ -11,6 +11,7 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/clause"
|
"gorm.io/gorm/clause"
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
|
"gorm.io/gorm/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -448,7 +449,8 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check default value
|
// 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
|
// not primary key
|
||||||
if !field.PrimaryKey {
|
if !field.PrimaryKey {
|
||||||
alterColumn = true
|
alterColumn = true
|
||||||
|
@ -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_1"))
|
||||||
AssertEqual(t, true, DB.Migrator().HasTable("coupon_product_2"))
|
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"))
|
||||||
|
}
|
||||||
|
@ -46,6 +46,13 @@ func CheckTruth(vals ...string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CheckColumnDefaultNull(val string) bool {
|
||||||
|
if val == "" || !strings.EqualFold(val, "NULL") {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func ToStringKey(values ...interface{}) string {
|
func ToStringKey(values ...interface{}) string {
|
||||||
results := make([]string, len(values))
|
results := make([]string, len(values))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user