From f7c0c31e8785764fc8ed38ddde4d5aa6cc695376 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Mon, 3 Jan 2022 21:19:00 -0600 Subject: [PATCH] Extract DecodeValue helper --- pgtype/bool.go | 6 +----- pgtype/box.go | 6 +----- pgtype/circle.go | 6 +----- pgtype/int.go | 18 +++--------------- pgtype/int.go.erb | 6 +----- pgtype/pgtype.go | 8 ++++++++ 6 files changed, 15 insertions(+), 35 deletions(-) diff --git a/pgtype/bool.go b/pgtype/bool.go index 4b6fbaf2..36d29d40 100644 --- a/pgtype/bool.go +++ b/pgtype/bool.go @@ -169,11 +169,7 @@ func (c BoolCodec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []byt } var b bool - scanPlan := c.PlanScan(ci, oid, format, &b, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &b) + err := codecScan(c, ci, oid, format, src, &b) if err != nil { return nil, err } diff --git a/pgtype/box.go b/pgtype/box.go index 438a4f21..67e24237 100644 --- a/pgtype/box.go +++ b/pgtype/box.go @@ -147,11 +147,7 @@ func (c BoxCodec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []byte } var box Box - scanPlan := c.PlanScan(ci, oid, format, &box, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &box) + err := codecScan(c, ci, oid, format, src, &box) if err != nil { return nil, err } diff --git a/pgtype/circle.go b/pgtype/circle.go index ec136438..83c97453 100644 --- a/pgtype/circle.go +++ b/pgtype/circle.go @@ -145,11 +145,7 @@ func (c CircleCodec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []b } var circle Circle - scanPlan := c.PlanScan(ci, oid, format, &circle, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &circle) + err := codecScan(c, ci, oid, format, src, &circle) if err != nil { return nil, err } diff --git a/pgtype/int.go b/pgtype/int.go index c8ec7509..609a58a3 100644 --- a/pgtype/int.go +++ b/pgtype/int.go @@ -226,11 +226,7 @@ func (c Int2Codec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []byt } var n int16 - scanPlan := c.PlanScan(ci, oid, format, &n, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &n) + err := codecScan(c, ci, oid, format, src, &n) if err != nil { return nil, err } @@ -714,11 +710,7 @@ func (c Int4Codec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []byt } var n int32 - scanPlan := c.PlanScan(ci, oid, format, &n, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &n) + err := codecScan(c, ci, oid, format, src, &n) if err != nil { return nil, err } @@ -1213,11 +1205,7 @@ func (c Int8Codec) DecodeValue(ci *ConnInfo, oid uint32, format int16, src []byt } var n int64 - scanPlan := c.PlanScan(ci, oid, format, &n, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &n) + err := codecScan(c, ci, oid, format, src, &n) if err != nil { return nil, err } diff --git a/pgtype/int.go.erb b/pgtype/int.go.erb index 99659d4c..6803c2ea 100644 --- a/pgtype/int.go.erb +++ b/pgtype/int.go.erb @@ -227,11 +227,7 @@ func (c Int<%= pg_byte_size %>Codec) DecodeValue(ci *ConnInfo, oid uint32, forma } var n int<%= pg_bit_size %> - scanPlan := c.PlanScan(ci, oid, format, &n, true) - if scanPlan == nil { - return nil, fmt.Errorf("PlanScan did not find a plan") - } - err := scanPlan.Scan(ci, oid, format, src, &n) + err := codecScan(c, ci, oid, format, src, &n) if err != nil { return nil, err } diff --git a/pgtype/pgtype.go b/pgtype/pgtype.go index 6221227d..d5e52830 100644 --- a/pgtype/pgtype.go +++ b/pgtype/pgtype.go @@ -960,3 +960,11 @@ func NewValue(v Value) Value { } var ErrScanTargetTypeChanged = errors.New("scan target type changed") + +func codecScan(codec Codec, ci *ConnInfo, oid uint32, format int16, src []byte, dst interface{}) error { + scanPlan := codec.PlanScan(ci, oid, format, dst, true) + if scanPlan == nil { + return fmt.Errorf("PlanScan did not find a plan") + } + return scanPlan.Scan(ci, oid, format, src, dst) +}