Fix update with customized time type, close #5101
This commit is contained in:
		
							parent
							
								
									7837fb6fa0
								
							
						
					
					
						commit
						b1201fce4e
					
				| @ -232,10 +232,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}) | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| @ -264,10 +264,10 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | ||||
| 									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 | ||||
| 							} | ||||
|  | ||||
| @ -293,6 +293,10 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if field.GORMDataType == "" { | ||||
| 		field.GORMDataType = field.DataType | ||||
| 	} | ||||
| 
 | ||||
| 	if val, ok := field.TagSettings["TYPE"]; ok { | ||||
| 		switch DataType(strings.ToLower(val)) { | ||||
| 		case Bool, Int, Uint, Float, String, Time, Bytes: | ||||
| @ -302,10 +306,6 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if field.GORMDataType == "" { | ||||
| 		field.GORMDataType = field.DataType | ||||
| 	} | ||||
| 
 | ||||
| 	if field.Size == 0 { | ||||
| 		switch reflect.Indirect(fieldValue).Kind() { | ||||
| 		case reflect.Int, reflect.Int64, reflect.Uint, reflect.Uint64, reflect.Float64: | ||||
|  | ||||
| @ -9,11 +9,11 @@ require ( | ||||
| 	github.com/lib/pq v1.10.4 | ||||
| 	github.com/mattn/go-sqlite3 v1.14.11 // indirect | ||||
| 	golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect | ||||
| 	gorm.io/driver/mysql v1.3.1 | ||||
| 	gorm.io/driver/mysql v1.3.2 | ||||
| 	gorm.io/driver/postgres v1.3.1 | ||||
| 	gorm.io/driver/sqlite v1.3.1 | ||||
| 	gorm.io/driver/sqlserver v1.3.1 | ||||
| 	gorm.io/gorm v1.23.0 | ||||
| 	gorm.io/gorm v1.23.1 | ||||
| ) | ||||
| 
 | ||||
| replace gorm.io/gorm => ../ | ||||
|  | ||||
| @ -2,6 +2,7 @@ package tests_test | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/google/uuid" | ||||
| 	"github.com/lib/pq" | ||||
| @ -15,9 +16,11 @@ func TestPostgres(t *testing.T) { | ||||
| 
 | ||||
| 	type Harumph struct { | ||||
| 		gorm.Model | ||||
| 		Name   string         `gorm:"check:name_checker,name <> ''"` | ||||
| 		Test   uuid.UUID      `gorm:"type:uuid;not null;default:gen_random_uuid()"` | ||||
| 		Things pq.StringArray `gorm:"type:text[]"` | ||||
| 		Name      string         `gorm:"check:name_checker,name <> ''"` | ||||
| 		Test      uuid.UUID      `gorm:"type:uuid;not null;default:gen_random_uuid()"` | ||||
| 		CreatedAt time.Time      `gorm:"type:TIMESTAMP WITHOUT TIME ZONE"` | ||||
| 		UpdatedAt time.Time      `gorm:"type:TIMESTAMP WITHOUT TIME ZONE"` | ||||
| 		Things    pq.StringArray `gorm:"type:text[]"` | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Exec("CREATE EXTENSION IF NOT EXISTS pgcrypto;").Error; err != nil { | ||||
| @ -48,6 +51,15 @@ func TestPostgres(t *testing.T) { | ||||
| 	if err := DB.Where("id = $1", harumph.ID).First(&Harumph{}).Error; err != nil || harumph.Name != "jinzhu" { | ||||
| 		t.Errorf("No error should happen, but got %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	harumph.Name = "jinzhu1" | ||||
| 	if err := DB.Save(&harumph).Error; err != nil { | ||||
| 		t.Errorf("Failed to update date, got error %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.First(&result, "id = ?", harumph.ID).Error; err != nil || harumph.Name != "jinzhu1" { | ||||
| 		t.Errorf("No error should happen, but got %v", err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type Post struct { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu