Restructure *Rows.Values() to use Get()

v3-numeric-wip
Jack Christensen 2017-03-11 20:07:31 -06:00
parent 57494a6a0f
commit 7da69cd3db
2 changed files with 26 additions and 56 deletions

View File

@ -324,59 +324,33 @@ func (rows *Rows) Values() ([]interface{}, error) {
values = append(values, nil) values = append(values, nil)
continue continue
} }
// TODO - consider what are the implications of returning complex types since database/sql uses this method
switch vr.Type().FormatCode {
// All intrinsic types (except string) are encoded with binary
// encoding so anything else should be treated as a string
case TextFormatCode:
switch vr.Type().DataType {
case JsonOid:
var d interface{}
decodeJSON(vr, &d)
values = append(values, d)
case JsonbOid:
var d interface{}
decodeJSONB(vr, &d)
values = append(values, d)
default:
values = append(values, vr.ReadString(vr.Len()))
}
case BinaryFormatCode: pgVal := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.TextDecoder)
switch vr.Type().DataType { if pgVal == nil {
case TextOid, VarcharOid: panic("need GenericText or GenericBinary")
values = append(values, decodeText(vr)) }
case BoolOid:
values = append(values, decodeBool(vr)) switch vr.Type().FormatCode {
case ByteaOid: case TextFormatCode:
values = append(values, decodeBytea(vr)) decoder := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.TextDecoder)
case Int8Oid: if decoder == nil {
values = append(values, decodeInt8(vr)) panic("need GenericText")
case Int2Oid:
values = append(values, decodeInt2(vr))
case Int4Oid:
values = append(values, decodeInt4(vr))
case Float4Oid:
values = append(values, decodeFloat4(vr))
case Float8Oid:
values = append(values, decodeFloat8(vr))
case DateOid:
values = append(values, decodeDate(vr))
case TimestampTzOid:
values = append(values, decodeTimestampTz(vr))
case TimestampOid:
values = append(values, decodeTimestamp(vr))
case JsonOid:
var d interface{}
decodeJSON(vr, &d)
values = append(values, d)
case JsonbOid:
var d interface{}
decodeJSONB(vr, &d)
values = append(values, d)
default:
rows.Fatal(errors.New("Values cannot handle binary format non-intrinsic types"))
} }
err := decoder.DecodeText(vr.bytes())
if err != nil {
rows.Fatal(err)
}
values = append(values, decoder.(pgtype.Value).Get())
case BinaryFormatCode:
decoder := rows.conn.oidPgtypeValues[vr.Type().DataType].(pgtype.BinaryDecoder)
if decoder == nil {
panic("need GenericBinary")
}
err := decoder.DecodeBinary(vr.bytes())
if err != nil {
rows.Fatal(err)
}
values = append(values, decoder.(pgtype.Value).Get())
default: default:
rows.Fatal(errors.New("Unknown format code")) rows.Fatal(errors.New("Unknown format code"))
} }

View File

@ -246,11 +246,7 @@ func getCurrentTimeline(t *testing.T, rc *pgx.ReplicationConn) int {
if e != nil { if e != nil {
t.Error(e) t.Error(e)
} }
timeline, e := strconv.Atoi(values[1].(string)) return int(values[1].(int32))
if e != nil {
t.Error(e)
}
return timeline
} }
t.Fatal("Failed to read timeline") t.Fatal("Failed to read timeline")
return -1 return -1