Add JSON benchmarks
This commit is contained in:
+42
-9
@@ -9,12 +9,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MyCompositeRaw struct {
|
type MyCompositeRaw struct {
|
||||||
a int32
|
A int32
|
||||||
b *string
|
B *string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (src MyCompositeRaw) EncodeBinary(ci *pgtype.ConnInfo, buf []byte) (newBuf []byte, err error) {
|
func (src MyCompositeRaw) EncodeBinary(ci *pgtype.ConnInfo, buf []byte) (newBuf []byte, err error) {
|
||||||
a := pgtype.Int4{src.a, pgtype.Present}
|
a := pgtype.Int4{src.A, pgtype.Present}
|
||||||
|
|
||||||
fieldBytes := make([]byte, 0, 64)
|
fieldBytes := make([]byte, 0, 64)
|
||||||
fieldBytes, _ = a.EncodeBinary(ci, fieldBytes[:0])
|
fieldBytes, _ = a.EncodeBinary(ci, fieldBytes[:0])
|
||||||
@@ -22,8 +22,8 @@ func (src MyCompositeRaw) EncodeBinary(ci *pgtype.ConnInfo, buf []byte) (newBuf
|
|||||||
newBuf = binary.RecordStart(buf, 2)
|
newBuf = binary.RecordStart(buf, 2)
|
||||||
newBuf = binary.RecordAdd(newBuf, pgtype.Int4OID, fieldBytes)
|
newBuf = binary.RecordAdd(newBuf, pgtype.Int4OID, fieldBytes)
|
||||||
|
|
||||||
if src.b != nil {
|
if src.B != nil {
|
||||||
fieldBytes, _ = pgtype.Text{*src.b, pgtype.Present}.EncodeBinary(ci, fieldBytes[:0])
|
fieldBytes, _ = pgtype.Text{*src.B, pgtype.Present}.EncodeBinary(ci, fieldBytes[:0])
|
||||||
newBuf = binary.RecordAdd(newBuf, pgtype.TextOID, fieldBytes)
|
newBuf = binary.RecordAdd(newBuf, pgtype.TextOID, fieldBytes)
|
||||||
} else {
|
} else {
|
||||||
newBuf = binary.RecordAddNull(newBuf, pgtype.TextOID)
|
newBuf = binary.RecordAddNull(newBuf, pgtype.TextOID)
|
||||||
@@ -60,11 +60,11 @@ func (dst *MyCompositeRaw) DecodeBinary(ci *pgtype.ConnInfo, src []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
dst.a = a.Int
|
dst.A = a.Int
|
||||||
if b.Status == pgtype.Present {
|
if b.Status == pgtype.Present {
|
||||||
dst.b = &b.String
|
dst.B = &b.String
|
||||||
} else {
|
} else {
|
||||||
dst.b = nil
|
dst.B = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -96,7 +96,7 @@ func BenchmarkBinaryEncodingHelper(b *testing.B) {
|
|||||||
x = buf
|
x = buf
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkBinaryEncodingRow(b *testing.B) {
|
func BenchmarkBinaryEncodingComposite(b *testing.B) {
|
||||||
buf := make([]byte, 0, 128)
|
buf := make([]byte, 0, 128)
|
||||||
ci := pgtype.NewConnInfo()
|
ci := pgtype.NewConnInfo()
|
||||||
f1 := 2
|
f1 := 2
|
||||||
@@ -111,6 +111,20 @@ func BenchmarkBinaryEncodingRow(b *testing.B) {
|
|||||||
x = buf
|
x = buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkBinaryEncodingJSON(b *testing.B) {
|
||||||
|
buf := make([]byte, 0, 128)
|
||||||
|
ci := pgtype.NewConnInfo()
|
||||||
|
v := MyCompositeRaw{4, ptrS("ABCDEFG")}
|
||||||
|
j := pgtype.JSON{}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
j.Set(v)
|
||||||
|
buf, _ = j.EncodeBinary(ci, buf[:0])
|
||||||
|
}
|
||||||
|
x = buf
|
||||||
|
}
|
||||||
|
|
||||||
var dstRaw MyCompositeRaw
|
var dstRaw MyCompositeRaw
|
||||||
|
|
||||||
func BenchmarkBinaryDecodingManual(b *testing.B) {
|
func BenchmarkBinaryDecodingManual(b *testing.B) {
|
||||||
@@ -161,3 +175,22 @@ func BenchmarkBinaryDecodingCompositeScan(b *testing.B) {
|
|||||||
gf1 = f1
|
gf1 = f1
|
||||||
gf2 = f2
|
gf2 = f2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkBinaryDecodingJSON(b *testing.B) {
|
||||||
|
ci := pgtype.NewConnInfo()
|
||||||
|
j := pgtype.JSON{}
|
||||||
|
j.Set(MyCompositeRaw{4, ptrS("ABCDEFG")})
|
||||||
|
buf, _ := j.EncodeBinary(ci, nil)
|
||||||
|
|
||||||
|
j = pgtype.JSON{}
|
||||||
|
dst := MyCompositeRaw{}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
err := j.DecodeBinary(ci, buf)
|
||||||
|
E(err)
|
||||||
|
err = j.AssignTo(&dst)
|
||||||
|
E(err)
|
||||||
|
}
|
||||||
|
dstRaw = dst
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user