ArrayType requires element OID
This commit is contained in:
+5
-11
@@ -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
@@ -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,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user