Skip to content

Commit b5b94dd

Browse files
committed
Fix buffer reuse when reading types.JSON
Closes #1427
1 parent 8b2fd83 commit b5b94dd

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

queries/reflect.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -240,11 +240,6 @@ func bind(rows *sql.Rows, obj any, structType, sliceType reflect.Type, bkind bin
240240
return err
241241
}
242242

243-
var oneStruct reflect.Value
244-
if bkind == kindSliceStruct {
245-
oneStruct = reflect.Indirect(reflect.New(structType))
246-
}
247-
248243
foundOne := false
249244
Rows:
250245
for rows.Next() {
@@ -256,7 +251,8 @@ Rows:
256251
case kindStruct:
257252
pointers = PtrsFromMapping(reflect.Indirect(reflect.ValueOf(obj)), mapping)
258253
case kindSliceStruct:
259-
pointers = PtrsFromMapping(oneStruct, mapping)
254+
newStruct = reflect.Indirect(reflect.New(structType))
255+
pointers = PtrsFromMapping(newStruct, mapping)
260256
case kindPtrSliceStruct:
261257
newStruct = makeStructPtr(structType)
262258
pointers = PtrsFromMapping(reflect.Indirect(newStruct), mapping)
@@ -272,9 +268,7 @@ Rows:
272268
switch bkind {
273269
case kindStruct:
274270
break Rows
275-
case kindSliceStruct:
276-
ptrSlice.Set(reflect.Append(ptrSlice, oneStruct))
277-
case kindPtrSliceStruct:
271+
case kindSliceStruct, kindPtrSliceStruct:
278272
ptrSlice.Set(reflect.Append(ptrSlice, newStruct))
279273
}
280274
}
@@ -871,4 +865,4 @@ func unTitleCase(n string) string {
871865
ret := buf.String()
872866
strmangle.PutBuffer(buf)
873867
return ret
874-
}
868+
}

0 commit comments

Comments
 (0)