Set default autoUpdateTime and autoCreatedTime -1
This commit is contained in:
		
							parent
							
								
									a480bd8545
								
							
						
					
					
						commit
						48791ed171
					
				@ -274,7 +274,7 @@ func ConvertToCreateValues(stmt *gorm.Statement) (values clause.Values) {
 | 
			
		||||
						if field.DefaultValueInterface != nil {
 | 
			
		||||
							values.Values[i][idx] = field.DefaultValueInterface
 | 
			
		||||
							field.Set(rv, field.DefaultValueInterface)
 | 
			
		||||
						} else if field.AutoCreateTime > 0 || field.AutoUpdateTime > 0 {
 | 
			
		||||
						} else if field.AutoCreateTime >= 0 || field.AutoUpdateTime >= 0 {
 | 
			
		||||
							field.Set(rv, curTime)
 | 
			
		||||
							values.Values[i][idx], _ = field.ValueOf(rv)
 | 
			
		||||
						}
 | 
			
		||||
@ -316,7 +316,7 @@ func ConvertToCreateValues(stmt *gorm.Statement) (values clause.Values) {
 | 
			
		||||
					if field.DefaultValueInterface != nil {
 | 
			
		||||
						values.Values[0][idx] = field.DefaultValueInterface
 | 
			
		||||
						field.Set(stmt.ReflectValue, field.DefaultValueInterface)
 | 
			
		||||
					} else if field.AutoCreateTime > 0 || field.AutoUpdateTime > 0 {
 | 
			
		||||
					} else if field.AutoCreateTime >= 0 || field.AutoUpdateTime >= 0 {
 | 
			
		||||
						field.Set(stmt.ReflectValue, curTime)
 | 
			
		||||
						values.Values[0][idx], _ = field.ValueOf(stmt.ReflectValue)
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
@ -201,7 +201,8 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
		if !stmt.SkipHooks && stmt.Schema != nil {
 | 
			
		||||
			for _, dbName := range stmt.Schema.DBNames {
 | 
			
		||||
				field := stmt.Schema.LookUpField(dbName)
 | 
			
		||||
				if field.AutoUpdateTime > 0 && value[field.Name] == nil && value[field.DBName] == nil {
 | 
			
		||||
 | 
			
		||||
				if field.AutoUpdateTime >= 0 && value[field.Name] == nil && value[field.DBName] == nil {
 | 
			
		||||
					if v, ok := selectColumns[field.DBName]; (ok && v) || !ok {
 | 
			
		||||
						now := stmt.DB.NowFunc()
 | 
			
		||||
						assignValue(field, now)
 | 
			
		||||
@ -210,10 +211,10 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now.UnixNano()})
 | 
			
		||||
						} else if field.AutoUpdateTime == schema.UnixMillisecond {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now.UnixNano() / 1e6})
 | 
			
		||||
						} else if field.GORMDataType == schema.Time {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now})
 | 
			
		||||
						} else {
 | 
			
		||||
						} else if field.AutoUpdateTime == schema.UnixSecond {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now.Unix()})
 | 
			
		||||
						} else {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now})
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
@ -225,18 +226,19 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
			set = make([]clause.Assignment, 0, len(stmt.Schema.FieldsByDBName))
 | 
			
		||||
			for _, dbName := range stmt.Schema.DBNames {
 | 
			
		||||
				field := stmt.Schema.LookUpField(dbName)
 | 
			
		||||
 | 
			
		||||
				if !field.PrimaryKey || (!updatingValue.CanAddr() || stmt.Dest != stmt.Model) {
 | 
			
		||||
					if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || (!stmt.SkipHooks && field.AutoUpdateTime > 0))) {
 | 
			
		||||
					if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || (!stmt.SkipHooks && field.AutoUpdateTime >= 0))) {
 | 
			
		||||
						value, isZero := field.ValueOf(updatingValue)
 | 
			
		||||
						if !stmt.SkipHooks && field.AutoUpdateTime > 0 {
 | 
			
		||||
						if !stmt.SkipHooks && field.AutoUpdateTime >= 0 {
 | 
			
		||||
							if field.AutoUpdateTime == schema.UnixNanosecond {
 | 
			
		||||
								value = stmt.DB.NowFunc().UnixNano()
 | 
			
		||||
							} else if field.AutoUpdateTime == schema.UnixMillisecond {
 | 
			
		||||
								value = stmt.DB.NowFunc().UnixNano() / 1e6
 | 
			
		||||
							} else if field.GORMDataType == schema.Time {
 | 
			
		||||
								value = stmt.DB.NowFunc()
 | 
			
		||||
							} else {
 | 
			
		||||
							} else if field.AutoUpdateTime == schema.UnixSecond {
 | 
			
		||||
								value = stmt.DB.NowFunc().Unix()
 | 
			
		||||
							} else {
 | 
			
		||||
								value = stmt.DB.NowFunc()
 | 
			
		||||
							}
 | 
			
		||||
							isZero = false
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
@ -89,6 +89,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
 | 
			
		||||
		TagSettings:            ParseTagSetting(fieldStruct.Tag.Get("gorm"), ";"),
 | 
			
		||||
		Schema:                 schema,
 | 
			
		||||
		AutoIncrementIncrement: 1,
 | 
			
		||||
		AutoUpdateTime:         -1,
 | 
			
		||||
		AutoCreateTime:         -1,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for field.IndirectFieldType.Kind() == reflect.Ptr {
 | 
			
		||||
@ -250,7 +252,7 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
 | 
			
		||||
		field.DataType = DataType(dataTyper.GormDataType())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if v, ok := field.TagSettings["AUTOCREATETIME"]; ok || (field.Name == "CreatedAt" && (field.DataType == Time || field.DataType == Int || field.DataType == Uint)) {
 | 
			
		||||
	if v, ok := field.TagSettings["AUTOCREATETIME"]; ok && (field.DataType == Time || field.DataType == Int || field.DataType == Uint) {
 | 
			
		||||
		if strings.ToUpper(v) == "NANO" {
 | 
			
		||||
			field.AutoCreateTime = UnixNanosecond
 | 
			
		||||
		} else if strings.ToUpper(v) == "MILLI" {
 | 
			
		||||
@ -258,9 +260,11 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
 | 
			
		||||
		} else {
 | 
			
		||||
			field.AutoCreateTime = UnixSecond
 | 
			
		||||
		}
 | 
			
		||||
	} else if ok && field.Name == "CreatedAt" {
 | 
			
		||||
		field.AutoCreateTime = 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if v, ok := field.TagSettings["AUTOUPDATETIME"]; ok || (field.Name == "UpdatedAt" && (field.DataType == Time || field.DataType == Int || field.DataType == Uint)) {
 | 
			
		||||
	if v, ok := field.TagSettings["AUTOUPDATETIME"]; ok && (field.DataType == Time || field.DataType == Int || field.DataType == Uint) {
 | 
			
		||||
		if strings.ToUpper(v) == "NANO" {
 | 
			
		||||
			field.AutoUpdateTime = UnixNanosecond
 | 
			
		||||
		} else if strings.ToUpper(v) == "MILLI" {
 | 
			
		||||
@ -268,6 +272,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
 | 
			
		||||
		} else {
 | 
			
		||||
			field.AutoUpdateTime = UnixSecond
 | 
			
		||||
		}
 | 
			
		||||
	} else if ok && field.Name == "UpdatedAt" {
 | 
			
		||||
		field.AutoUpdateTime = 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if val, ok := field.TagSettings["TYPE"]; ok {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user