Hstore: fix AssignTo
Hstore.AssignTo a map of string pointers takes the address of the loop variable, thus setting all the entries to the same string pointer. extend TestHstoreAssignToNullable assert fix
This commit is contained in:
committed by
Jack Christensen
parent
c5a0faca99
commit
53266f029f
@@ -90,7 +90,8 @@ func (src *Hstore) AssignTo(dst interface{}) error {
|
||||
case Null:
|
||||
(*v)[k] = nil
|
||||
case Present:
|
||||
(*v)[k] = &val.String
|
||||
str := val.String
|
||||
(*v)[k] = &str
|
||||
default:
|
||||
return fmt.Errorf("cannot decode %#v into %T", src, dst)
|
||||
}
|
||||
|
||||
+2
-1
@@ -181,13 +181,14 @@ func TestHstoreAssignTo(t *testing.T) {
|
||||
|
||||
func TestHstoreAssignToNullable(t *testing.T) {
|
||||
var m map[string]*string
|
||||
strPtr := func(str string) *string { return &str }
|
||||
|
||||
simpleTests := []struct {
|
||||
src pgtype.Hstore
|
||||
dst *map[string]*string
|
||||
expected map[string]*string
|
||||
}{
|
||||
{src: pgtype.Hstore{Map: map[string]pgtype.Text{"foo": {Status: pgtype.Null}}, Status: pgtype.Present}, dst: &m, expected: map[string]*string{"foo": nil}},
|
||||
{src: pgtype.Hstore{Map: map[string]pgtype.Text{"foo": {Status: pgtype.Null}, "bar": {String: "1", Status: pgtype.Present}, "baz": {String: "2", Status: pgtype.Present}}, Status: pgtype.Present}, dst: &m, expected: map[string]*string{"foo": nil, "bar": strPtr("1"), "baz": strPtr("2")}},
|
||||
{src: pgtype.Hstore{Status: pgtype.Null}, dst: &m, expected: ((map[string]*string)(nil))},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user