Fix JSON encoding of *string

This commit is contained in:
Jack Christensen 2015-09-21 13:40:47 -05:00
parent 1b90ad1051
commit 4987d5425e
2 changed files with 36 additions and 0 deletions

View File

@ -798,6 +798,7 @@ func (c *Conn) sendPreparedQuery(ps *PreparedStatement, arguments ...interface{}
continue continue
} }
encode:
switch arg := arguments[i].(type) { switch arg := arguments[i].(type) {
case Encoder: case Encoder:
err = arg.Encode(wbuf, oid) err = arg.Encode(wbuf, oid)
@ -810,6 +811,7 @@ func (c *Conn) sendPreparedQuery(ps *PreparedStatement, arguments ...interface{}
continue continue
} else { } else {
arguments[i] = v.Elem().Interface() arguments[i] = v.Elem().Interface()
goto encode
} }
} }
switch oid { switch oid {

View File

@ -89,6 +89,8 @@ func TestJsonAndJsonbTranscode(t *testing.T) {
} }
typename := conn.PgTypes[oid].Name typename := conn.PgTypes[oid].Name
testJsonString(t, conn, typename)
testJsonStringPointer(t, conn, typename)
testJsonSingleLevelStringMap(t, conn, typename) testJsonSingleLevelStringMap(t, conn, typename)
testJsonNestedMap(t, conn, typename) testJsonNestedMap(t, conn, typename)
testJsonStringArray(t, conn, typename) testJsonStringArray(t, conn, typename)
@ -98,6 +100,38 @@ func TestJsonAndJsonbTranscode(t *testing.T) {
} }
} }
func testJsonString(t *testing.T, conn *pgx.Conn, typename string) {
input := `{"key": "value"}`
expectedOutput := map[string]string{"key": "value"}
var output map[string]string
err := conn.QueryRow("select $1::"+typename, input).Scan(&output)
if err != nil {
t.Errorf("%s: QueryRow Scan failed: %v", typename, err)
return
}
if !reflect.DeepEqual(expectedOutput, output) {
t.Errorf("%s: Did not transcode map[string]string successfully: %v is not %v", typename, expectedOutput, output)
return
}
}
func testJsonStringPointer(t *testing.T, conn *pgx.Conn, typename string) {
input := `{"key": "value"}`
expectedOutput := map[string]string{"key": "value"}
var output map[string]string
err := conn.QueryRow("select $1::"+typename, &input).Scan(&output)
if err != nil {
t.Errorf("%s: QueryRow Scan failed: %v", typename, err)
return
}
if !reflect.DeepEqual(expectedOutput, output) {
t.Errorf("%s: Did not transcode map[string]string successfully: %v is not %v", typename, expectedOutput, output)
return
}
}
func testJsonSingleLevelStringMap(t *testing.T, conn *pgx.Conn, typename string) { func testJsonSingleLevelStringMap(t *testing.T, conn *pgx.Conn, typename string) {
input := map[string]string{"key": "value"} input := map[string]string{"key": "value"}
var output map[string]string var output map[string]string