Merge branch 'pgioimport' into v5-dev
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
# pgio
|
||||||
|
|
||||||
|
Package pgio is a low-level toolkit building messages in the PostgreSQL wire protocol.
|
||||||
|
|
||||||
|
pgio provides functions for appending integers to a []byte while doing byte
|
||||||
|
order conversion.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// Package pgio is a low-level toolkit building messages in the PostgreSQL wire protocol.
|
||||||
|
/*
|
||||||
|
pgio provides functions for appending integers to a []byte while doing byte
|
||||||
|
order conversion.
|
||||||
|
*/
|
||||||
|
package pgio
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package pgio
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
|
func AppendUint16(buf []byte, n uint16) []byte {
|
||||||
|
wp := len(buf)
|
||||||
|
buf = append(buf, 0, 0)
|
||||||
|
binary.BigEndian.PutUint16(buf[wp:], n)
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendUint32(buf []byte, n uint32) []byte {
|
||||||
|
wp := len(buf)
|
||||||
|
buf = append(buf, 0, 0, 0, 0)
|
||||||
|
binary.BigEndian.PutUint32(buf[wp:], n)
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendUint64(buf []byte, n uint64) []byte {
|
||||||
|
wp := len(buf)
|
||||||
|
buf = append(buf, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
binary.BigEndian.PutUint64(buf[wp:], n)
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendInt16(buf []byte, n int16) []byte {
|
||||||
|
return AppendUint16(buf, uint16(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendInt32(buf []byte, n int32) []byte {
|
||||||
|
return AppendUint32(buf, uint32(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendInt64(buf []byte, n int64) []byte {
|
||||||
|
return AppendUint64(buf, uint64(n))
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetInt32(buf []byte, n int32) {
|
||||||
|
binary.BigEndian.PutUint32(buf, uint32(n))
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package pgio
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAppendUint16NilBuf(t *testing.T) {
|
||||||
|
buf := AppendUint16(nil, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 1}) {
|
||||||
|
t.Errorf("AppendUint16(nil, 1) => %v, want %v", buf, []byte{0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint16EmptyBuf(t *testing.T) {
|
||||||
|
buf := []byte{}
|
||||||
|
buf = AppendUint16(buf, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 1}) {
|
||||||
|
t.Errorf("AppendUint16(nil, 1) => %v, want %v", buf, []byte{0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint16BufWithCapacityDoesNotAllocate(t *testing.T) {
|
||||||
|
buf := make([]byte, 0, 4)
|
||||||
|
AppendUint16(buf, 1)
|
||||||
|
buf = buf[0:2]
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 1}) {
|
||||||
|
t.Errorf("AppendUint16(nil, 1) => %v, want %v", buf, []byte{0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint32NilBuf(t *testing.T) {
|
||||||
|
buf := AppendUint32(nil, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint32(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint32EmptyBuf(t *testing.T) {
|
||||||
|
buf := []byte{}
|
||||||
|
buf = AppendUint32(buf, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint32(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint32BufWithCapacityDoesNotAllocate(t *testing.T) {
|
||||||
|
buf := make([]byte, 0, 4)
|
||||||
|
AppendUint32(buf, 1)
|
||||||
|
buf = buf[0:4]
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint32(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint64NilBuf(t *testing.T) {
|
||||||
|
buf := AppendUint64(nil, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 0, 0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint64(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 0, 0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint64EmptyBuf(t *testing.T) {
|
||||||
|
buf := []byte{}
|
||||||
|
buf = AppendUint64(buf, 1)
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 0, 0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint64(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 0, 0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAppendUint64BufWithCapacityDoesNotAllocate(t *testing.T) {
|
||||||
|
buf := make([]byte, 0, 8)
|
||||||
|
AppendUint64(buf, 1)
|
||||||
|
buf = buf[0:8]
|
||||||
|
if !reflect.DeepEqual(buf, []byte{0, 0, 0, 0, 0, 0, 0, 1}) {
|
||||||
|
t.Errorf("AppendUint64(nil, 1) => %v, want %v", buf, []byte{0, 0, 0, 0, 0, 0, 0, 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user