fix : update miss where's condition when primary key use "<-:create" tag (#4738)
* fix:update miss where condition * fix:rename test case
This commit is contained in:
		
							parent
							
								
									e3fc49a694
								
							
						
					
					
						commit
						b46e2afc4a
					
				| @ -235,7 +235,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | |||||||
| 		case reflect.Struct: | 		case reflect.Struct: | ||||||
| 			set = make([]clause.Assignment, 0, len(stmt.Schema.FieldsByDBName)) | 			set = make([]clause.Assignment, 0, len(stmt.Schema.FieldsByDBName)) | ||||||
| 			for _, dbName := range stmt.Schema.DBNames { | 			for _, dbName := range stmt.Schema.DBNames { | ||||||
| 				if field := updatingSchema.LookUpField(dbName); field != nil && field.Updatable { | 				if field := updatingSchema.LookUpField(dbName); field != nil { | ||||||
| 					if !field.PrimaryKey || !updatingValue.CanAddr() || stmt.Dest != stmt.Model { | 					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) | 							value, isZero := field.ValueOf(updatingValue) | ||||||
| @ -252,7 +252,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | |||||||
| 								isZero = false | 								isZero = false | ||||||
| 							} | 							} | ||||||
| 
 | 
 | ||||||
| 							if ok || !isZero { | 							if (ok || !isZero) && field.Updatable { | ||||||
| 								set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: value}) | 								set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: value}) | ||||||
| 								assignValue(field, value) | 								assignValue(field, value) | ||||||
| 							} | 							} | ||||||
|  | |||||||
| @ -309,3 +309,22 @@ func TestFindOrCreate(t *testing.T) { | |||||||
| 		t.Errorf("belongs to association should be saved") | 		t.Errorf("belongs to association should be saved") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestUpdateWithMissWhere(t *testing.T) { | ||||||
|  | 	type User struct { | ||||||
|  | 		ID   uint   `gorm:"column:id;<-:create"` | ||||||
|  | 		Name string `gorm:"column:name"` | ||||||
|  | 	} | ||||||
|  | 	user := User{ID: 1, Name: "king"} | ||||||
|  | 	tx := DB.Session(&gorm.Session{DryRun: true}).Save(&user) | ||||||
|  | 
 | ||||||
|  | 	if err := tx.Error; err != nil { | ||||||
|  | 		t.Fatalf("failed to update user,missing where condtion,err=%+v", err) | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if !regexp.MustCompile("WHERE .id. = [^ ]+$").MatchString(tx.Statement.SQL.String()) { | ||||||
|  | 		t.Fatalf("invalid updating SQL, got %v", tx.Statement.SQL.String()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 kinggo
						kinggo