fix:Issue migrating field with CURRENT_TIMESTAMP
This commit is contained in:
		
							parent
							
								
									d9525d4da4
								
							
						
					
					
						commit
						bfdaf992d8
					
				@ -470,17 +470,19 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// check default value
 | 
						// check default value
 | 
				
			||||||
	if !field.PrimaryKey {
 | 
						if !field.PrimaryKey {
 | 
				
			||||||
 | 
							currentDefaultNotNull := field.HasDefaultValue && !strings.EqualFold(field.DefaultValue, "NULL")
 | 
				
			||||||
		dv, dvNotNull := columnType.DefaultValue()
 | 
							dv, dvNotNull := columnType.DefaultValue()
 | 
				
			||||||
		if dvNotNull && field.DefaultValueInterface == nil {
 | 
							if dvNotNull && !currentDefaultNotNull {
 | 
				
			||||||
			// defalut value -> null
 | 
								// defalut value -> null
 | 
				
			||||||
			alterColumn = true
 | 
								alterColumn = true
 | 
				
			||||||
		} else if !dvNotNull && field.DefaultValueInterface != nil {
 | 
							} else if !dvNotNull && currentDefaultNotNull {
 | 
				
			||||||
			// null -> default value
 | 
								// null -> default value
 | 
				
			||||||
			alterColumn = true
 | 
								alterColumn = true
 | 
				
			||||||
		} else if dv != field.DefaultValue {
 | 
							} else if (field.GORMDataType != schema.Time && dv != field.DefaultValue) ||
 | 
				
			||||||
 | 
								(field.GORMDataType == schema.Time && !strings.EqualFold(strings.TrimSuffix(dv, "()"), strings.TrimSuffix(field.DefaultValue, "()"))) {
 | 
				
			||||||
			// default value not equal
 | 
								// default value not equal
 | 
				
			||||||
			// not both null
 | 
								// not both null
 | 
				
			||||||
			if !(field.DefaultValueInterface == nil && !dvNotNull) {
 | 
								if currentDefaultNotNull || dvNotNull {
 | 
				
			||||||
				alterColumn = true
 | 
									alterColumn = true
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -757,6 +757,32 @@ func TestPrimarykeyID(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestCurrentTimestamp(t *testing.T) {
 | 
				
			||||||
 | 
						if DB.Dialector.Name() != "mysql" {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						type CurrentTimestampTest struct {
 | 
				
			||||||
 | 
							ID     string     `gorm:"primary_key"`
 | 
				
			||||||
 | 
							TimeAt *time.Time `gorm:"type:datetime;not null;default:CURRENT_TIMESTAMP;unique"`
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						err = DB.Migrator().DropTable(&CurrentTimestampTest{})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("DropTable err:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						err = DB.AutoMigrate(&CurrentTimestampTest{})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("AutoMigrate err:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = DB.AutoMigrate(&CurrentTimestampTest{})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("AutoMigrate err:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						AssertEqual(t, true, DB.Migrator().HasIndex(&CurrentTimestampTest{}, "time_at"))
 | 
				
			||||||
 | 
						AssertEqual(t, false, DB.Migrator().HasIndex(&CurrentTimestampTest{}, "time_at_2"))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestUniqueColumn(t *testing.T) {
 | 
					func TestUniqueColumn(t *testing.T) {
 | 
				
			||||||
	if DB.Dialector.Name() != "mysql" {
 | 
						if DB.Dialector.Name() != "mysql" {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user