Refactor pgio and types to append buffers
This commit is contained in:
+15
-32
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user