From 5d1cdfef2e6c24e71518609e2f668a516abf7284 Mon Sep 17 00:00:00 2001 From: cyhone Date: Thu, 23 Mar 2023 14:02:35 +0800 Subject: [PATCH] avoid starting a transaction when performing only one insert operation in CreateInBatches function (#6174) --- finisher_api.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/finisher_api.go b/finisher_api.go index 0e3c2876..0e26f181 100644 --- a/finisher_api.go +++ b/finisher_api.go @@ -35,9 +35,10 @@ func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) { var rowsAffected int64 tx = db.getInstance() + // the reflection length judgment of the optimized value + reflectLen := reflectValue.Len() + callFc := func(tx *DB) error { - // the reflection length judgment of the optimized value - reflectLen := reflectValue.Len() for i := 0; i < reflectLen; i += batchSize { ends := i + batchSize if ends > reflectLen { @@ -55,7 +56,7 @@ func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) { return nil } - if tx.SkipDefaultTransaction { + if tx.SkipDefaultTransaction || reflectLen <= batchSize { tx.AddError(callFc(tx.Session(&Session{}))) } else { tx.AddError(tx.Transaction(callFc))