Skip to content

Commit

Permalink
Merge pull request #2112 from jennifersp/master
Browse files Browse the repository at this point in the history
support text scanner for binary format for uint32
  • Loading branch information
jackc authored Aug 23, 2024
2 parents 4f7e19d + 57fd684 commit b197994
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
18 changes: 18 additions & 0 deletions pgtype/uint32.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ func (Uint32Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPl
return scanPlanBinaryUint32ToUint32{}
case Uint32Scanner:
return scanPlanBinaryUint32ToUint32Scanner{}
case TextScanner:
return scanPlanBinaryUint32ToTextScanner{}
}
case TextFormatCode:
switch target.(type) {
Expand Down Expand Up @@ -282,6 +284,22 @@ func (scanPlanBinaryUint32ToUint32Scanner) Scan(src []byte, dst any) error {
return s.ScanUint32(Uint32{Uint32: n, Valid: true})
}

type scanPlanBinaryUint32ToTextScanner struct{}

func (scanPlanBinaryUint32ToTextScanner) Scan(src []byte, dst any) error {
s, ok := (dst).(TextScanner)
if !ok {
return ErrScanTargetTypeChanged
}

if src == nil {
return s.ScanText(Text{})
}

n := uint64(binary.BigEndian.Uint32(src))
return s.ScanText(Text{String: strconv.FormatUint(n, 10), Valid: true})
}

type scanPlanTextAnyToUint32Scanner struct{}

func (scanPlanTextAnyToUint32Scanner) Scan(src []byte, dst any) error {
Expand Down
1 change: 1 addition & 0 deletions pgtype/uint32_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ func TestUint32Codec(t *testing.T) {
},
{pgtype.Uint32{}, new(pgtype.Uint32), isExpectedEq(pgtype.Uint32{})},
{nil, new(pgtype.Uint32), isExpectedEq(pgtype.Uint32{})},
{"1147", new(string), isExpectedEq("1147")},
})
}

0 comments on commit b197994

Please sign in to comment.