func (f *Formatted) Scan(r *pgx.ValueReader) error { if r.Len() == -1 { return nil } *f = Formatted(r.ReadString(r.Len())) return r.Err() }
func (attr *Bytes) Scan(vr *pgx.ValueReader) error { if vr.Len() == -1 { attr.Value = nil attr.Status = Null return nil } attr.Value = vr.ReadBytes(vr.Len()) attr.Status = Present return vr.Err() }
func (attr *String) Scan(vr *pgx.ValueReader) error { if vr.Len() == -1 { attr.Value = "" attr.Status = Null return nil } err := pgx.Decode(vr, &attr.Value) if err != nil { return err } attr.Status = Present return vr.Err() }
func (attr *Int64) Scan(vr *pgx.ValueReader) error { if vr.Type().DataType != pgx.Int8Oid { return pgx.SerializationError(fmt.Sprintf("Int64.Scan cannot decode OID %d", vr.Type().DataType)) } if vr.Len() == -1 { attr.Value = 0 attr.Status = Null return nil } err := pgx.Decode(vr, &attr.Value) if err != nil { return err } attr.Status = Present return vr.Err() }
func (attr *IPNet) Scan(vr *pgx.ValueReader) error { oid := vr.Type().DataType if oid != pgx.InetOid && oid != pgx.CidrOid { return pgx.SerializationError(fmt.Sprintf("IPNet.Scan cannot decode OID %d", vr.Type().DataType)) } if vr.Len() == -1 { attr.Value = net.IPNet{} attr.Status = Null return nil } attr.Status = Present err := pgx.Decode(vr, &attr.Value) if err != nil { return err } return vr.Err() }
func (attr *Time) Scan(vr *pgx.ValueReader) error { oid := vr.Type().DataType if oid != pgx.TimestampTzOid && oid != pgx.TimestampOid && oid != pgx.DateOid { return pgx.SerializationError(fmt.Sprintf("Time.Scan cannot decode OID %d", vr.Type().DataType)) } if vr.Len() == -1 { attr.Value = time.Time{} attr.Status = Null return nil } err := pgx.Decode(vr, &attr.Value) if err != nil { return err } attr.Status = Present return vr.Err() }
func (p *NullPoint) Scan(vr *pgx.ValueReader) error { if vr.Type().DataTypeName != "point" { return pgx.SerializationError(fmt.Sprintf("NullPoint.Scan cannot decode %s (OID %d)", vr.Type().DataTypeName, vr.Type().DataType)) } if vr.Len() == -1 { p.X, p.Y, p.Valid = 0, 0, false return nil } switch vr.Type().FormatCode { case pgx.TextFormatCode: s := vr.ReadString(vr.Len()) match := pointRegexp.FindStringSubmatch(s) if match == nil { return pgx.SerializationError(fmt.Sprintf("Received invalid point: %v", s)) } var err error p.X, err = strconv.ParseFloat(match[1], 64) if err != nil { return pgx.SerializationError(fmt.Sprintf("Received invalid point: %v", s)) } p.Y, err = strconv.ParseFloat(match[2], 64) if err != nil { return pgx.SerializationError(fmt.Sprintf("Received invalid point: %v", s)) } case pgx.BinaryFormatCode: return errors.New("binary format not implemented") default: return fmt.Errorf("unknown format %v", vr.Type().FormatCode) } p.Valid = true return vr.Err() }