Extract pgio

pgxtype-experiment
Jack Christensen 2017-02-20 13:35:37 -06:00
parent 8b07d97d13
commit 66b79e9408
4 changed files with 30 additions and 20 deletions

8
pgio/doc.go Normal file
View File

@ -0,0 +1,8 @@
// Package pgio a extremely low-level IO toolkit for the PostgreSQL wire protocol.
/*
pgio provides functions for reading and writing integers from io.Reader and
io.Writer while doing byte order conversion. It publishes interfaces which
readers and writers may implement to decode and encode messages with the minimum
of memory allocations.
*/
package pgio

View File

@ -1,19 +1,19 @@
package pgtype
package pgio
import (
"encoding/binary"
"io"
)
type uint16Reader interface {
type Uint16Reader interface {
ReadUint16() (n uint16, err error)
}
type uint32Reader interface {
type Uint32Reader interface {
ReadUint32() (n uint32, err error)
}
type uint64Reader interface {
type Uint64Reader interface {
ReadUint64() (n uint64, err error)
}
@ -32,7 +32,7 @@ func ReadByte(r io.Reader) (byte, error) {
// may be more efficient than directly using Read if r provides a ReadUint16
// method.
func ReadUint16(r io.Reader) (uint16, error) {
if r, ok := r.(uint16Reader); ok {
if r, ok := r.(Uint16Reader); ok {
return r.ReadUint16()
}
@ -57,7 +57,7 @@ func ReadInt16(r io.Reader) (int16, error) {
// may be more efficient than directly using Read if r provides a ReadUint32
// method.
func ReadUint32(r io.Reader) (uint32, error) {
if r, ok := r.(uint32Reader); ok {
if r, ok := r.(Uint32Reader); ok {
return r.ReadUint32()
}
@ -82,7 +82,7 @@ func ReadInt32(r io.Reader) (int32, error) {
// may be more efficient than directly using Read if r provides a ReadUint64
// method.
func ReadUint64(r io.Reader) (uint64, error) {
if r, ok := r.(uint64Reader); ok {
if r, ok := r.(Uint64Reader); ok {
return r.ReadUint64()
}

View File

@ -1,19 +1,19 @@
package pgtype
package pgio
import (
"encoding/binary"
"io"
)
type uint16Writer interface {
type Uint16Writer interface {
WriteUint16(uint16) (n int, err error)
}
type uint32Writer interface {
type Uint32Writer interface {
WriteUint32(uint32) (n int, err error)
}
type uint64Writer interface {
type Uint64Writer interface {
WriteUint64(uint64) (n int, err error)
}
@ -30,7 +30,7 @@ func WriteByte(w io.Writer, b byte) error {
// may be more efficient than directly using Write if w provides a WriteUint16
// method.
func WriteUint16(w io.Writer, n uint16) (int, error) {
if w, ok := w.(uint16Writer); ok {
if w, ok := w.(Uint16Writer); ok {
return w.WriteUint16(n)
}
b := make([]byte, 2)
@ -49,7 +49,7 @@ func WriteInt16(w io.Writer, n int16) (int, error) {
// may be more efficient than directly using Write if w provides a WriteUint32
// method.
func WriteUint32(w io.Writer, n uint32) (int, error) {
if w, ok := w.(uint32Writer); ok {
if w, ok := w.(Uint32Writer); ok {
return w.WriteUint32(n)
}
b := make([]byte, 4)
@ -68,7 +68,7 @@ func WriteInt32(w io.Writer, n int32) (int, error) {
// may be more efficient than directly using Write if w provides a WriteUint64
// method.
func WriteUint64(w io.Writer, n uint64) (int, error) {
if w, ok := w.(uint64Writer); ok {
if w, ok := w.(Uint64Writer); ok {
return w.WriteUint64(n)
}
b := make([]byte, 8)

View File

@ -4,12 +4,14 @@ import (
"fmt"
"io"
"strconv"
"github.com/jackc/pgx/pgio"
)
type Int4 int32
func (i *Int4) DecodeText(r io.Reader) error {
size, err := ReadInt32(r)
size, err := pgio.ReadInt32(r)
if err != nil {
return err
}
@ -34,7 +36,7 @@ func (i *Int4) DecodeText(r io.Reader) error {
}
func (i *Int4) DecodeBinary(r io.Reader) error {
size, err := ReadInt32(r)
size, err := pgio.ReadInt32(r)
if err != nil {
return err
}
@ -43,7 +45,7 @@ func (i *Int4) DecodeBinary(r io.Reader) error {
return fmt.Errorf("invalid length for int4: %v", size)
}
n, err := ReadInt32(r)
n, err := pgio.ReadInt32(r)
if err != nil {
return err
}
@ -54,7 +56,7 @@ func (i *Int4) DecodeBinary(r io.Reader) error {
func (i Int4) EncodeText(w io.Writer) error {
s := strconv.FormatInt(int64(i), 10)
_, err := WriteInt32(w, int32(len(s)))
_, err := pgio.WriteInt32(w, int32(len(s)))
if err != nil {
return nil
}
@ -63,11 +65,11 @@ func (i Int4) EncodeText(w io.Writer) error {
}
func (i Int4) EncodeBinary(w io.Writer) error {
_, err := WriteInt32(w, 4)
_, err := pgio.WriteInt32(w, 4)
if err != nil {
return err
}
_, err = WriteInt32(w, int32(i))
_, err = pgio.WriteInt32(w, int32(i))
return err
}