fix(FindInBatches): throw err if pk not exists (#5868)
This commit is contained in:
		
							parent
							
								
									b6836c2d3e
								
							
						
					
					
						commit
						342310fba4
					
				| @ -231,7 +231,11 @@ func (db *DB) FindInBatches(dest interface{}, batchSize int, fc func(tx *DB, bat | |||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		primaryValue, _ := result.Statement.Schema.PrioritizedPrimaryField.ValueOf(tx.Statement.Context, resultsValue.Index(resultsValue.Len()-1)) | 		primaryValue, zero := result.Statement.Schema.PrioritizedPrimaryField.ValueOf(tx.Statement.Context, resultsValue.Index(resultsValue.Len()-1)) | ||||||
|  | 		if zero { | ||||||
|  | 			tx.AddError(ErrPrimaryKeyRequired) | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
| 		queryDB = tx.Clauses(clause.Gt{Column: clause.Column{Table: clause.CurrentTable, Name: clause.PrimaryKey}, Value: primaryValue}) | 		queryDB = tx.Clauses(clause.Gt{Column: clause.Column{Table: clause.CurrentTable, Name: clause.PrimaryKey}, Value: primaryValue}) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -514,8 +518,9 @@ func (db *DB) Scan(dest interface{}) (tx *DB) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Pluck queries a single column from a model, returning in the slice dest. E.g.:
 | // Pluck queries a single column from a model, returning in the slice dest. E.g.:
 | ||||||
| //     var ages []int64
 | //
 | ||||||
| //     db.Model(&users).Pluck("age", &ages)
 | //	var ages []int64
 | ||||||
|  | //	db.Model(&users).Pluck("age", &ages)
 | ||||||
| func (db *DB) Pluck(column string, dest interface{}) (tx *DB) { | func (db *DB) Pluck(column string, dest interface{}) (tx *DB) { | ||||||
| 	tx = db.getInstance() | 	tx = db.getInstance() | ||||||
| 	if tx.Statement.Model != nil { | 	if tx.Statement.Model != nil { | ||||||
|  | |||||||
| @ -408,6 +408,13 @@ func TestFindInBatchesWithError(t *testing.T) { | |||||||
| 	if totalBatch != 0 { | 	if totalBatch != 0 { | ||||||
| 		t.Fatalf("incorrect total batch, expected: %v, got: %v", 0, totalBatch) | 		t.Fatalf("incorrect total batch, expected: %v, got: %v", 0, totalBatch) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if result := DB.Omit("id").Where("name = ?", users[0].Name).FindInBatches(&results, 2, func(tx *gorm.DB, batch int) error { | ||||||
|  | 		totalBatch += batch | ||||||
|  | 		return nil | ||||||
|  | 	}); result.Error != gorm.ErrPrimaryKeyRequired { | ||||||
|  | 		t.Fatal("expected errors to have occurred, but nothing happened") | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestFillSmallerStruct(t *testing.T) { | func TestFillSmallerStruct(t *testing.T) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Cr
						Cr