Skip to content

Commit b197994

Browse files
authored
Merge pull request #2112 from jennifersp/master
support text scanner for binary format for uint32
2 parents 4f7e19d + 57fd684 commit b197994

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

pgtype/uint32.go

+18
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ func (Uint32Codec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPl
205205
return scanPlanBinaryUint32ToUint32{}
206206
case Uint32Scanner:
207207
return scanPlanBinaryUint32ToUint32Scanner{}
208+
case TextScanner:
209+
return scanPlanBinaryUint32ToTextScanner{}
208210
}
209211
case TextFormatCode:
210212
switch target.(type) {
@@ -282,6 +284,22 @@ func (scanPlanBinaryUint32ToUint32Scanner) Scan(src []byte, dst any) error {
282284
return s.ScanUint32(Uint32{Uint32: n, Valid: true})
283285
}
284286

287+
type scanPlanBinaryUint32ToTextScanner struct{}
288+
289+
func (scanPlanBinaryUint32ToTextScanner) Scan(src []byte, dst any) error {
290+
s, ok := (dst).(TextScanner)
291+
if !ok {
292+
return ErrScanTargetTypeChanged
293+
}
294+
295+
if src == nil {
296+
return s.ScanText(Text{})
297+
}
298+
299+
n := uint64(binary.BigEndian.Uint32(src))
300+
return s.ScanText(Text{String: strconv.FormatUint(n, 10), Valid: true})
301+
}
302+
285303
type scanPlanTextAnyToUint32Scanner struct{}
286304

287305
func (scanPlanTextAnyToUint32Scanner) Scan(src []byte, dst any) error {

pgtype/uint32_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ func TestUint32Codec(t *testing.T) {
1717
},
1818
{pgtype.Uint32{}, new(pgtype.Uint32), isExpectedEq(pgtype.Uint32{})},
1919
{nil, new(pgtype.Uint32), isExpectedEq(pgtype.Uint32{})},
20+
{"1147", new(string), isExpectedEq("1147")},
2021
})
2122
}

0 commit comments

Comments
 (0)