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) {
|
||||
case TIDScanner:
|
||||
return scanPlanBinaryTIDToTIDScanner{}
|
||||
case TextScanner:
|
||||
return scanPlanBinaryTIDToTextScanner{}
|
||||
}
|
||||
case TextFormatCode:
|
||||
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{}
|
||||
|
||||
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),
|
||||
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{})},
|
||||
{nil, new(pgtype.TID), isExpectedEq(pgtype.TID{})},
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue