From 16bda61a0366e3a52fa24ebaf780c9b9a5494e44 Mon Sep 17 00:00:00 2001 From: sivchari Date: Wed, 17 Feb 2021 13:52:44 +0900 Subject: [PATCH] change the method of initializing slice and fixed the length to be specified as 0 --- callbacks/associations.go | 17 +++++++++-------- callbacks/delete.go | 15 ++++++++------- callbacks/preload.go | 6 ++++-- schema/naming.go | 2 +- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/callbacks/associations.go b/callbacks/associations.go index 28c769e7..bf3dd42e 100644 --- a/callbacks/associations.go +++ b/callbacks/associations.go @@ -39,10 +39,10 @@ func SaveBeforeAssociations(create bool) func(db *gorm.DB) { switch db.Statement.ReflectValue.Kind() { case reflect.Slice, reflect.Array: var ( - objs []reflect.Value fieldType = rel.Field.FieldType isPtr = fieldType.Kind() == reflect.Ptr ) + objs := make([]reflect.Value, 0, db.Statement.ReflectValue.Len()) if !isPtr { fieldType = reflect.PtrTo(fieldType) @@ -140,7 +140,7 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) { } if elems.Len() > 0 { - assignmentColumns := []string{} + assignmentColumns := make([]string, 0, len(rel.References)) for _, ref := range rel.References { assignmentColumns = append(assignmentColumns, ref.ForeignKey.DBName) } @@ -154,7 +154,7 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) { f = f.Addr() } - assignmentColumns := []string{} + assignmentColumns := make([]string, 0, len(rel.References)) for _, ref := range rel.References { if ref.OwnPrimaryKey { fv, _ := ref.PrimaryKey.ValueOf(db.Statement.ReflectValue) @@ -219,7 +219,7 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) { } if elems.Len() > 0 { - assignmentColumns := []string{} + assignmentColumns := make([]string, 0, len(rel.References)) for _, ref := range rel.References { assignmentColumns = append(assignmentColumns, ref.ForeignKey.DBName) } @@ -324,7 +324,7 @@ func onConflictOption(stmt *gorm.Statement, s *schema.Schema, selectColumns map[ } if len(defaultUpdatingColumns) > 0 { - var columns []clause.Column + columns := make([]clause.Column, 0, len(s.PrimaryFieldDBNames)) for _, dbName := range s.PrimaryFieldDBNames { columns = append(columns, clause.Column{Name: dbName}) } @@ -340,10 +340,11 @@ func onConflictOption(stmt *gorm.Statement, s *schema.Schema, selectColumns map[ func saveAssociations(db *gorm.DB, rel *schema.Relationship, values interface{}, selectColumns map[string]bool, restricted bool, defaultUpdatingColumns []string) error { var ( - selects, omits []string - onConflict = onConflictOption(db.Statement, rel.FieldSchema, selectColumns, restricted, defaultUpdatingColumns) - refName = rel.Name + "." + onConflict = onConflictOption(db.Statement, rel.FieldSchema, selectColumns, restricted, defaultUpdatingColumns) + refName = rel.Name + "." ) + selects := make([]string, 0, len(selectColumns)) + omits := make([]string, 0, len(selectColumns)) for name, ok := range selectColumns { columnName := "" diff --git a/callbacks/delete.go b/callbacks/delete.go index 128722a1..f1bfcecb 100644 --- a/callbacks/delete.go +++ b/callbacks/delete.go @@ -41,7 +41,7 @@ func DeleteBeforeAssociations(db *gorm.DB) { } if len(db.Statement.Selects) > 0 { - var selects []string + selects := make([]string, 0, len(db.Statement.Selects)) for _, s := range db.Statement.Selects { if s == clause.Associations { selects = append(selects, s) @@ -69,14 +69,15 @@ func DeleteBeforeAssociations(db *gorm.DB) { } case schema.Many2Many: var ( - queryConds []clause.Expression - foreignFields []*schema.Field - relForeignKeys []string - modelValue = reflect.New(rel.JoinTable.ModelType).Interface() - table = rel.JoinTable.Table - tx = db.Session(&gorm.Session{NewDB: true}).Model(modelValue).Table(table) + modelValue = reflect.New(rel.JoinTable.ModelType).Interface() + table = rel.JoinTable.Table + tx = db.Session(&gorm.Session{NewDB: true}).Model(modelValue).Table(table) ) + queryConds := make([]clause.Expression, 0, len(rel.References)) + foreignFields := make([]*schema.Field, 0, len(rel.References)) + relForeignKeys := make([]string, 0, len(rel.References)) + for _, ref := range rel.References { if ref.OwnPrimaryKey { foreignFields = append(foreignFields, ref.PrimaryKey) diff --git a/callbacks/preload.go b/callbacks/preload.go index 27e3c3dd..0abaf8af 100644 --- a/callbacks/preload.go +++ b/callbacks/preload.go @@ -27,8 +27,10 @@ func preload(db *gorm.DB, rel *schema.Relationship, conds []interface{}, preload }) if rel.JoinTable != nil { - var joinForeignFields, joinRelForeignFields []*schema.Field - var joinForeignKeys []string + joinForeignFields := make([]*schema.Field, 0, len(rel.References)) + joinRelForeignFields := make([]*schema.Field, 0, len(rel.References)) + joinForeignKeys := make([]string, 0, len(rel.References)) + for _, ref := range rel.References { if ref.OwnPrimaryKey { joinForeignKeys = append(joinForeignKeys, ref.ForeignKey.DBName) diff --git a/schema/naming.go b/schema/naming.go index e10c9212..0643d1bd 100644 --- a/schema/naming.go +++ b/schema/naming.go @@ -92,7 +92,7 @@ var ( ) func init() { - var commonInitialismsForReplacer []string + commonInitialismsForReplacer := make([]string, 0, len(commonInitialisms)) for _, initialism := range commonInitialisms { commonInitialismsForReplacer = append(commonInitialismsForReplacer, initialism, strings.Title(strings.ToLower(initialism))) }