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