forked from mirror/gorm
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…
Reference in New Issue