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")