2
0

Refactor pgio and types to append buffers

This commit is contained in:
Jack Christensen
2017-05-02 20:38:26 -05:00
parent ee001a7cae
commit 6e64a0c867
78 changed files with 1551 additions and 2627 deletions
+15 -32
View File
@@ -4,7 +4,6 @@ import (
"database/sql/driver"
"encoding/binary"
"fmt"
"io"
"math"
"strconv"
"strings"
@@ -116,12 +115,12 @@ func (dst *Path) DecodeBinary(ci *ConnInfo, src []byte) error {
return nil
}
func (src *Path) EncodeText(ci *ConnInfo, w io.Writer) (bool, error) {
func (src *Path) EncodeText(ci *ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case Null:
return true, nil
return nil, nil
case Undefined:
return false, errUndefined
return nil, errUndefined
}
var startByte, endByte byte
@@ -132,56 +131,40 @@ func (src *Path) EncodeText(ci *ConnInfo, w io.Writer) (bool, error) {
startByte = '['
endByte = ']'
}
if err := pgio.WriteByte(w, startByte); err != nil {
return false, err
}
buf = append(buf, startByte)
for i, p := range src.P {
if i > 0 {
if err := pgio.WriteByte(w, ','); err != nil {
return false, err
}
}
if _, err := io.WriteString(w, fmt.Sprintf(`(%f,%f)`, p.X, p.Y)); err != nil {
return false, err
buf = append(buf, ',')
}
buf = append(buf, fmt.Sprintf(`(%f,%f)`, p.X, p.Y)...)
}
err := pgio.WriteByte(w, endByte)
return false, err
return append(buf, endByte), nil
}
func (src *Path) EncodeBinary(ci *ConnInfo, w io.Writer) (bool, error) {
func (src *Path) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
switch src.Status {
case Null:
return true, nil
return nil, nil
case Undefined:
return false, errUndefined
return nil, errUndefined
}
var closeByte byte
if src.Closed {
closeByte = 1
}
if err := pgio.WriteByte(w, closeByte); err != nil {
return false, err
}
buf = append(buf, closeByte)
if _, err := pgio.WriteInt32(w, int32(len(src.P))); err != nil {
return false, err
}
buf = pgio.AppendInt32(buf, int32(len(src.P)))
for _, p := range src.P {
if _, err := pgio.WriteUint64(w, math.Float64bits(p.X)); err != nil {
return false, err
}
if _, err := pgio.WriteUint64(w, math.Float64bits(p.Y)); err != nil {
return false, err
}
buf = pgio.AppendUint64(buf, math.Float64bits(p.X))
buf = pgio.AppendUint64(buf, math.Float64bits(p.Y))
}
return false, nil
return buf, nil
}
// Scan implements the database/sql Scanner interface.