diff --git a/array_type.go b/array_type.go index 4fe772fd..5de39818 100644 --- a/array_type.go +++ b/array_type.go @@ -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 { diff --git a/array_type_test.go b/array_type_test.go index d0812a67..0f296bb5 100644 --- a/array_type_test.go +++ b/array_type_test.go @@ -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, })