From 036101deb508cf0bd2b3310567ce14ab90a5e3a4 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Mon, 11 May 2020 17:41:20 -0500 Subject: [PATCH] Allow scanning to nil as no-op --- pgtype.go | 4 ++++ pgtype_test.go | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/pgtype.go b/pgtype.go index 7fee66b3..193980ef 100644 --- a/pgtype.go +++ b/pgtype.go @@ -833,6 +833,10 @@ func (ci *ConnInfo) PlanScan(oid uint32, formatCode int16, buf []byte, dst inter } func (ci *ConnInfo) Scan(oid uint32, formatCode int16, src []byte, dst interface{}) error { + if dst == nil { + return nil + } + plan := ci.PlanScan(oid, formatCode, src, dst) return plan.Scan(ci, oid, formatCode, src, dst) } diff --git a/pgtype_test.go b/pgtype_test.go index a96720d5..6bdbe7c8 100644 --- a/pgtype_test.go +++ b/pgtype_test.go @@ -64,6 +64,13 @@ func TestConnInfoParamFormatCodeForOID(t *testing.T) { assert.Equal(t, int16(pgtype.BinaryFormatCode), ci.ParamFormatCodeForOID(pgtype.Int4OID)) } +func TestConnInfoScanNilIsNoOp(t *testing.T) { + ci := pgtype.NewConnInfo() + + err := ci.Scan(pgtype.TextOID, pgx.TextFormatCode, []byte("foo"), nil) + assert.NoError(t, err) +} + func TestConnInfoScanUnknownOIDToStringsAndBytes(t *testing.T) { unknownOID := uint32(999999) srcBuf := []byte("foo")