avoid starting a transaction when performing only one insert operation in CreateInBatches function

This commit is contained in:
chenyahui 2023-03-23 11:32:12 +08:00
parent 1a7ea98ac5
commit ddda8b4e17

View File

@ -35,9 +35,10 @@ func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) {
var rowsAffected int64 var rowsAffected int64
tx = db.getInstance() tx = db.getInstance()
// the reflection length judgment of the optimized value
reflectLen := reflectValue.Len()
callFc := func(tx *DB) error { callFc := func(tx *DB) error {
// the reflection length judgment of the optimized value
reflectLen := reflectValue.Len()
for i := 0; i < reflectLen; i += batchSize { for i := 0; i < reflectLen; i += batchSize {
ends := i + batchSize ends := i + batchSize
if ends > reflectLen { if ends > reflectLen {
@ -55,7 +56,7 @@ func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) {
return nil return nil
} }
if tx.SkipDefaultTransaction { if tx.SkipDefaultTransaction || reflectLen <= batchSize {
tx.AddError(callFc(tx.Session(&Session{}))) tx.AddError(callFc(tx.Session(&Session{})))
} else { } else {
tx.AddError(tx.Transaction(callFc)) tx.AddError(tx.Transaction(callFc))