mirror of https://github.com/jackc/pgx.git
Extract pgio
parent
8b07d97d13
commit
66b79e9408
|
@ -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
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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)
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue