Revert recycle struct optimisation to avoid pointer overwrites
This commit is contained in:
parent
a58159e00e
commit
bb86abb588
12
scan.go
12
scan.go
@ -65,7 +65,6 @@ func (db *DB) scanIntoStruct(rows Rows, reflectValue reflect.Value, values []int
|
|||||||
|
|
||||||
db.RowsAffected++
|
db.RowsAffected++
|
||||||
db.AddError(rows.Scan(values...))
|
db.AddError(rows.Scan(values...))
|
||||||
|
|
||||||
joinedSchemaMap := make(map[*schema.Field]interface{})
|
joinedSchemaMap := make(map[*schema.Field]interface{})
|
||||||
for idx, field := range fields {
|
for idx, field := range fields {
|
||||||
if field == nil {
|
if field == nil {
|
||||||
@ -241,9 +240,8 @@ func Scan(rows Rows, db *DB, mode ScanMode) {
|
|||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
var (
|
var (
|
||||||
elem reflect.Value
|
elem reflect.Value
|
||||||
recyclableStruct = reflect.New(reflectValueType)
|
isArrayKind = reflectValue.Kind() == reflect.Array
|
||||||
isArrayKind = reflectValue.Kind() == reflect.Array
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if !update || reflectValue.Len() == 0 {
|
if !update || reflectValue.Len() == 0 {
|
||||||
@ -275,11 +273,7 @@ func Scan(rows Rows, db *DB, mode ScanMode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if isPtr && db.RowsAffected > 0 {
|
elem = reflect.New(reflectValueType)
|
||||||
elem = reflect.New(reflectValueType)
|
|
||||||
} else {
|
|
||||||
elem = recyclableStruct
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
db.scanIntoStruct(rows, elem, values, fields, joinFields)
|
db.scanIntoStruct(rows, elem, values, fields, joinFields)
|
||||||
|
@ -89,9 +89,9 @@ func TestEmbeddedStruct(t *testing.T) {
|
|||||||
}
|
}
|
||||||
expectAuthors := []string{"Edward", "George"}
|
expectAuthors := []string{"Edward", "George"}
|
||||||
for i, post := range egPosts {
|
for i, post := range egPosts {
|
||||||
t.Log(i, post)
|
t.Log(i, post.Author)
|
||||||
if want := expectAuthors[i]; post.Author.Name != want {
|
if want := expectAuthors[i]; post.Author.Name != want {
|
||||||
t.Errorf("expected author %s got %s", post.Author.Name, want)
|
t.Errorf("expected author %s got %s", want, post.Author.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user