2
0

ArrayType requires element OID

This commit is contained in:
Jack Christensen
2020-05-13 07:11:10 -05:00
parent ee0e207ee4
commit f8471ebfa8
2 changed files with 7 additions and 13 deletions
+5 -11
View File
@@ -18,11 +18,12 @@ type ArrayType struct {
status Status
typeName string
elementOID uint32
newElement func() ValueTranscoder
}
func NewArrayType(typeName string, newElement func() ValueTranscoder) *ArrayType {
return &ArrayType{typeName: typeName, newElement: newElement}
func NewArrayType(typeName string, elementOID uint32, newElement func() ValueTranscoder) *ArrayType {
return &ArrayType{typeName: typeName, elementOID: elementOID, newElement: newElement}
}
func (at *ArrayType) NewTypeValue() Value {
@@ -32,6 +33,7 @@ func (at *ArrayType) NewTypeValue() Value {
status: at.status,
typeName: at.typeName,
elementOID: at.elementOID,
newElement: at.newElement,
}
}
@@ -281,15 +283,7 @@ func (src ArrayType) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
arrayHeader := ArrayHeader{
Dimensions: src.dimensions,
}
{
value := src.newElement()
if dt, ok := ci.DataTypeForValue(value); ok {
arrayHeader.ElementOID = int32(dt.OID)
} else {
return nil, errors.Errorf("unable to find oid for element type %v", value)
}
ElementOID: int32(src.elementOID),
}
for i := range src.elements {
+2 -2
View File
@@ -10,7 +10,7 @@ import (
)
func TestArrayTypeValue(t *testing.T) {
arrayType := pgtype.NewArrayType("_text", func() pgtype.ValueTranscoder { return &pgtype.Text{} })
arrayType := pgtype.NewArrayType("_text", pgtype.TextOID, func() pgtype.ValueTranscoder { return &pgtype.Text{} })
err := arrayType.Set(nil)
require.NoError(t, err)
@@ -49,7 +49,7 @@ func TestArrayTypeTranscode(t *testing.T) {
defer testutil.MustCloseContext(t, conn)
conn.ConnInfo().RegisterDataType(pgtype.DataType{
Value: pgtype.NewArrayType("_text", func() pgtype.ValueTranscoder { return &pgtype.Text{} }),
Value: pgtype.NewArrayType("_text", pgtype.TextOID, func() pgtype.ValueTranscoder { return &pgtype.Text{} }),
Name: "_text",
OID: pgtype.TextArrayOID,
})