mirror of https://github.com/jackc/pgx.git
Allow scanning tid to string
parent
5ca29a014e
commit
c8b8764401
|
@ -137,6 +137,8 @@ func (TIDCodec) PlanScan(ci *ConnInfo, oid uint32, format int16, target interfac
|
||||||
switch target.(type) {
|
switch target.(type) {
|
||||||
case TIDScanner:
|
case TIDScanner:
|
||||||
return scanPlanBinaryTIDToTIDScanner{}
|
return scanPlanBinaryTIDToTIDScanner{}
|
||||||
|
case TextScanner:
|
||||||
|
return scanPlanBinaryTIDToTextScanner{}
|
||||||
}
|
}
|
||||||
case TextFormatCode:
|
case TextFormatCode:
|
||||||
switch target.(type) {
|
switch target.(type) {
|
||||||
|
@ -168,6 +170,28 @@ func (scanPlanBinaryTIDToTIDScanner) Scan(ci *ConnInfo, oid uint32, formatCode i
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type scanPlanBinaryTIDToTextScanner struct{}
|
||||||
|
|
||||||
|
func (scanPlanBinaryTIDToTextScanner) Scan(ci *ConnInfo, oid uint32, formatCode int16, src []byte, dst interface{}) error {
|
||||||
|
scanner := (dst).(TextScanner)
|
||||||
|
|
||||||
|
if src == nil {
|
||||||
|
return scanner.ScanText(Text{})
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(src) != 6 {
|
||||||
|
return fmt.Errorf("invalid length for tid: %v", len(src))
|
||||||
|
}
|
||||||
|
|
||||||
|
blockNumber := binary.BigEndian.Uint32(src)
|
||||||
|
offsetNumber := binary.BigEndian.Uint16(src[4:])
|
||||||
|
|
||||||
|
return scanner.ScanText(Text{
|
||||||
|
String: fmt.Sprintf(`(%d,%d)`, blockNumber, offsetNumber),
|
||||||
|
Valid: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
type scanPlanTextAnyToTIDScanner struct{}
|
type scanPlanTextAnyToTIDScanner struct{}
|
||||||
|
|
||||||
func (scanPlanTextAnyToTIDScanner) Scan(ci *ConnInfo, oid uint32, formatCode int16, src []byte, dst interface{}) error {
|
func (scanPlanTextAnyToTIDScanner) Scan(ci *ConnInfo, oid uint32, formatCode int16, src []byte, dst interface{}) error {
|
||||||
|
|
|
@ -18,6 +18,16 @@ func TestTIDCodec(t *testing.T) {
|
||||||
new(pgtype.TID),
|
new(pgtype.TID),
|
||||||
isExpectedEq(pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Valid: true}),
|
isExpectedEq(pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Valid: true}),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
pgtype.TID{BlockNumber: 42, OffsetNumber: 43, Valid: true},
|
||||||
|
new(string),
|
||||||
|
isExpectedEq("(42,43)"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pgtype.TID{BlockNumber: 4294967295, OffsetNumber: 65535, Valid: true},
|
||||||
|
new(string),
|
||||||
|
isExpectedEq("(4294967295,65535)"),
|
||||||
|
},
|
||||||
{pgtype.TID{}, new(pgtype.TID), isExpectedEq(pgtype.TID{})},
|
{pgtype.TID{}, new(pgtype.TID), isExpectedEq(pgtype.TID{})},
|
||||||
{nil, new(pgtype.TID), isExpectedEq(pgtype.TID{})},
|
{nil, new(pgtype.TID), isExpectedEq(pgtype.TID{})},
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue