From f7b59341610a362a28e42fe5f3f5faa669a2d975 Mon Sep 17 00:00:00 2001 From: ken2403 Date: Tue, 4 Apr 2023 19:02:59 +0900 Subject: [PATCH] add method --- finisher_api.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/finisher_api.go b/finisher_api.go index 0e26f181..e2c0e0cf 100644 --- a/finisher_api.go +++ b/finisher_api.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "fmt" + "math" "reflect" "strings" "sync" @@ -26,6 +27,23 @@ func (db *DB) Create(value interface{}) (tx *DB) { return tx.callbacks.Create().Execute(tx) } +func (db *DB) CreateInAutoBatches(value interface{}, maxParameter int) (tx *DB) { + reflectValue := reflect.Indirect(reflect.ValueOf(value)) + + switch reflectValue.Kind() { + case reflect.Slice, reflect.Array: + nField := reflect.Indirect(reflectValue.Index(0)).NumField() + length := reflectValue.Len() + batchSize := int(math.Min(float64(maxParameter/nField), float64(length))) + tx = db.CreateInBatches(value, batchSize) + default: + tx = db.getInstance() + tx.Statement.Dest = value + tx = tx.callbacks.Create().Execute(tx) + } + return +} + // CreateInBatches inserts value in batches of batchSize func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB) { reflectValue := reflect.Indirect(reflect.ValueOf(value))