66 "errors"
77 "fmt"
88 "reflect"
9- "strings"
109)
1110
1211type insertStatus struct {
@@ -139,7 +138,7 @@ func (s insertStatus) OnDuplicateKeyIgnore() toInsertFinal {
139138
140139func (s insertStatus ) GetSQL () (string , error ) {
141140 var fields []Field
142- var valuesBuilder strings. Builder
141+ var values [] interface {}
143142 if len (s .models ) > 0 {
144143 models := make ([]Model , 0 , len (s .models ))
145144 for _ , model := range s .models {
@@ -150,19 +149,11 @@ func (s insertStatus) GetSQL() (string, error) {
150149
151150 if len (models ) > 0 {
152151 fields = models [0 ].GetTable ().GetFields ()
153- valuesBuilder .Grow (64 * len (models ))
154- for i , model := range models {
152+ for _ , model := range models {
155153 if model .GetTable ().GetName () != s .scope .Tables [0 ].GetName () {
156154 return "" , errors .New ("invalid table from model" )
157155 }
158- if i > 0 {
159- valuesBuilder .WriteString (", " )
160- }
161- valuesBuilder .WriteString ("(" )
162- if err := commaValuesBuilder (s .scope , & valuesBuilder , model .GetValues ()); err != nil {
163- return "" , err
164- }
165- valuesBuilder .WriteString (")" )
156+ values = append (values , model .GetValues ())
166157 }
167158 }
168159 } else {
@@ -171,12 +162,10 @@ func (s insertStatus) GetSQL() (string, error) {
171162 } else {
172163 fields = s .fields
173164 }
174- if err := commaValuesBuilder (s .scope , & valuesBuilder , s .values ); err != nil {
175- return "" , err
176- }
165+ values = s .values
177166 }
178167
179- if valuesBuilder . Len ( ) == 0 {
168+ if len ( values ) == 0 {
180169 return "/* INSERT without VALUES */ DO 0" , nil
181170 }
182171
@@ -185,8 +174,12 @@ func (s insertStatus) GetSQL() (string, error) {
185174 if err != nil {
186175 return "" , err
187176 }
177+ valuesSql , err := commaValues (s .scope , values )
178+ if err != nil {
179+ return "" , err
180+ }
188181
189- sqlString := s .method + " INTO " + tableSql + " (" + fieldsSql + ") VALUES " + valuesBuilder . String ()
182+ sqlString := s .method + " INTO " + tableSql + " (" + fieldsSql + ") VALUES " + valuesSql
190183 if len (s .onDuplicateKeyUpdateAssignments ) > 0 {
191184 assignmentsSql , err := commaAssignments (s .scope , s .onDuplicateKeyUpdateAssignments )
192185 if err != nil {
0 commit comments