Skip to content

Commit 71de844

Browse files
committed
Split bson package and update mongo package
GODRIVER-537 GODRIVER-551 GODRIVER-527 GODRIVER-566 GODRIVER-494 Change-Id: I55bdfe7f48ded7fd9923d906d3cc6ecaec8156da
1 parent 6ea632f commit 71de844

File tree

121 files changed

+10585
-14878
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+10585
-14878
lines changed

benchmark/bson_map.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package benchmark
22

33
import (
4-
"bytes"
54
"context"
65
"errors"
76
"fmt"
87

9-
"github.com/mongodb/mongo-go-driver/bson"
8+
"github.com/mongodb/mongo-go-driver/bson/bsoncodec"
109
)
1110

1211
func bsonMapDecoding(ctx context.Context, tm TimerManager, iters int, dataSet string) error {
@@ -19,10 +18,9 @@ func bsonMapDecoding(ctx context.Context, tm TimerManager, iters int, dataSet st
1918

2019
for i := 0; i < iters; i++ {
2120
out := make(map[string]interface{})
22-
dec := bson.NewDecoder(bytes.NewReader(r))
23-
err := dec.Decode(out)
21+
err := bsoncodec.Unmarshal(r, &out)
2422
if err != nil {
25-
return err
23+
return nil
2624
}
2725
if len(out) == 0 {
2826
return fmt.Errorf("decoding failed")
@@ -38,19 +36,20 @@ func bsonMapEncoding(ctx context.Context, tm TimerManager, iters int, dataSet st
3836
}
3937

4038
doc := make(map[string]interface{})
41-
dec := bson.NewDecoder(bytes.NewReader(r))
42-
if err = dec.Decode(doc); err != nil {
39+
err = bsoncodec.Unmarshal(r, &doc)
40+
if err != nil {
4341
return err
4442
}
4543

46-
buf := bytes.NewBuffer([]byte{})
44+
var buf []byte
4745
tm.ResetTimer()
4846
for i := 0; i < iters; i++ {
49-
if err = bson.NewEncoder(buf).Encode(&doc); err != nil {
47+
buf, err = bsoncodec.MarshalAppend(buf[:0], doc)
48+
if err != nil {
5049
return nil
5150
}
5251

53-
if buf.Len() == 0 {
52+
if len(buf) == 0 {
5453
return errors.New("encoding failed")
5554
}
5655
}

benchmark/bson_struct.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package benchmark
22

33
import (
4-
"bytes"
54
"context"
65
"errors"
76

8-
"github.com/mongodb/mongo-go-driver/bson"
7+
"github.com/mongodb/mongo-go-driver/bson/bsoncodec"
98
)
109

1110
func BSONFlatStructDecoding(ctx context.Context, tm TimerManager, iters int) error {
@@ -18,8 +17,7 @@ func BSONFlatStructDecoding(ctx context.Context, tm TimerManager, iters int) err
1817

1918
for i := 0; i < iters; i++ {
2019
out := flatBSON{}
21-
dec := bson.NewDecoder(bytes.NewReader(r))
22-
err := dec.Decode(&out)
20+
err := bsoncodec.Unmarshal(r, &out)
2321
if err != nil {
2422
return err
2523
}
@@ -34,18 +32,20 @@ func BSONFlatStructEncoding(ctx context.Context, tm TimerManager, iters int) err
3432
}
3533

3634
doc := flatBSON{}
37-
if err = bson.NewDecoder(bytes.NewReader(r)).Decode(&doc); err != nil {
35+
err = bsoncodec.Unmarshal(r, &doc)
36+
if err != nil {
3837
return err
3938
}
4039

41-
buf := bytes.NewBuffer([]byte{})
40+
var buf []byte
4241

4342
tm.ResetTimer()
4443
for i := 0; i < iters; i++ {
45-
if err = bson.NewEncoder(buf).Encode(&doc); err != nil {
44+
buf, err = bsoncodec.Marshal(doc)
45+
if err != nil {
4646
return err
4747
}
48-
if buf.Len() == 0 {
48+
if len(buf) == 0 {
4949
return errors.New("encoding failed")
5050
}
5151
}
@@ -59,18 +59,20 @@ func BSONFlatStructTagsEncoding(ctx context.Context, tm TimerManager, iters int)
5959
}
6060

6161
doc := flatBSONTags{}
62-
if err = bson.NewDecoder(bytes.NewReader(r)).Decode(&doc); err != nil {
62+
err = bsoncodec.Unmarshal(r, &doc)
63+
if err != nil {
6364
return err
6465
}
6566

66-
buf := bytes.NewBuffer([]byte{})
67+
var buf []byte
6768

6869
tm.ResetTimer()
6970
for i := 0; i < iters; i++ {
70-
if err = bson.NewEncoder(buf).Encode(&doc); err != nil {
71+
buf, err = bsoncodec.MarshalAppend(buf[:0], doc)
72+
if err != nil {
7173
return err
7274
}
73-
if buf.Len() == 0 {
75+
if len(buf) == 0 {
7476
return errors.New("encoding failed")
7577
}
7678
}
@@ -86,8 +88,7 @@ func BSONFlatStructTagsDecoding(ctx context.Context, tm TimerManager, iters int)
8688
tm.ResetTimer()
8789
for i := 0; i < iters; i++ {
8890
out := flatBSONTags{}
89-
dec := bson.NewDecoder(bytes.NewReader(r))
90-
err := dec.Decode(&out)
91+
err := bsoncodec.Unmarshal(r, &out)
9192
if err != nil {
9293
return err
9394
}

benchmark/multi.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func MultiFindMany(ctx context.Context, tm TimerManager, iters int) error {
3131

3232
payload := make([]interface{}, iters)
3333
for idx := range payload {
34-
payload[idx] = *doc
34+
payload[idx] = doc
3535
}
3636

3737
if _, err = coll.InsertMany(ctx, payload); err != nil {
@@ -109,7 +109,7 @@ func multiInsertCase(ctx context.Context, tm TimerManager, iters int, data strin
109109

110110
payload := make([]interface{}, iters)
111111
for idx := range payload {
112-
payload[idx] = *doc
112+
payload[idx] = doc
113113
}
114114

115115
coll := db.Collection("corpus")

bson/bson_test.go

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,9 @@
77
package bson
88

99
import (
10-
"bytes"
1110
"encoding/binary"
1211
"math"
13-
"reflect"
1412
"testing"
15-
"time"
16-
17-
"github.com/stretchr/testify/assert"
1813
)
1914

2015
func TestValue(t *testing.T) {
@@ -107,64 +102,3 @@ func TestValue(t *testing.T) {
107102
})
108103
t.Run("document", func(t *testing.T) {})
109104
}
110-
111-
func TestTimeRoundTrip(t *testing.T) {
112-
val := struct {
113-
Value time.Time
114-
ID string
115-
}{
116-
ID: "time-rt-test",
117-
}
118-
119-
assert.True(t, val.Value.IsZero())
120-
121-
bsonOut, err := Marshal(val)
122-
assert.NoError(t, err)
123-
rtval := struct {
124-
Value time.Time
125-
ID string
126-
}{}
127-
128-
err = Unmarshal(bsonOut, &rtval)
129-
assert.NoError(t, err)
130-
assert.Equal(t, val, rtval)
131-
assert.True(t, rtval.Value.IsZero())
132-
133-
}
134-
135-
func TestBasicEncode(t *testing.T) {
136-
for _, tc := range marshalingTestCases {
137-
t.Run(tc.name, func(t *testing.T) {
138-
got := make(writer, 0, 1024)
139-
vw := newValueWriter(&got)
140-
reg := NewRegistryBuilder().Build()
141-
codec, err := reg.Lookup(reflect.TypeOf(tc.val))
142-
noerr(t, err)
143-
err = codec.EncodeValue(EncodeContext{Registry: reg}, vw, tc.val)
144-
noerr(t, err)
145-
146-
if !bytes.Equal(got, tc.want) {
147-
t.Errorf("Bytes are not equal. got %v; want %v", Reader(got), Reader(tc.want))
148-
t.Errorf("Bytes:\n%v\n%v", got, tc.want)
149-
}
150-
})
151-
}
152-
}
153-
154-
func TestBasicDecode(t *testing.T) {
155-
for _, tc := range unmarshalingTestCases {
156-
t.Run(tc.name, func(t *testing.T) {
157-
got := reflect.New(tc.sType).Interface()
158-
vr := newValueReader(tc.data)
159-
reg := NewRegistryBuilder().Build()
160-
codec, err := reg.Lookup(reflect.TypeOf(got))
161-
noerr(t, err)
162-
err = codec.DecodeValue(DecodeContext{Registry: reg}, vr, got)
163-
noerr(t, err)
164-
165-
if !reflect.DeepEqual(got, tc.want) {
166-
t.Errorf("Results do not match. got %+v; want %+v", got, tc.want)
167-
}
168-
})
169-
}
170-
}

bson/benchmark_test.go renamed to bson/bsoncodec/benchmark_test.go

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
package bson
1+
package bsoncodec
22

3-
import "testing"
3+
import (
4+
"testing"
5+
6+
"github.com/mongodb/mongo-go-driver/bson"
7+
)
48

59
type encodetest struct {
610
Field1String string
@@ -113,54 +117,42 @@ var nestedInstance = nestedtest1{
113117
},
114118
}
115119

116-
func BenchmarkEncodingv1(b *testing.B) {
117-
for i := 0; i < b.N; i++ {
118-
_, _ = Marshal(encodetestInstance)
119-
}
120-
}
121-
122120
func BenchmarkEncodingv2(b *testing.B) {
123121
for i := 0; i < b.N; i++ {
124-
_, _ = Marshalv2(encodetestInstance)
122+
_, _ = Marshal(encodetestInstance)
125123
}
126124
}
127125

128126
func BenchmarkEncodingv2ToDocument(b *testing.B) {
129127
var buf []byte
130128
for i := 0; i < b.N; i++ {
131-
buf, _ = Marshalv2(encodetestInstance)
132-
_, _ = ReadDocument(buf)
129+
buf, _ = Marshal(encodetestInstance)
130+
_, _ = bson.ReadDocument(buf)
133131
}
134132
}
135133

136-
func BenchmarkEncodingDocument(b *testing.B) {
137-
for i := 0; i < b.N; i++ {
138-
_, _ = MarshalDocument(encodetestInstance)
139-
}
140-
}
141-
142-
func BenchmarkEncodingv1Nested(b *testing.B) {
143-
for i := 0; i < b.N; i++ {
144-
_, _ = Marshal(nestedInstance)
145-
}
146-
}
134+
// func BenchmarkEncodingDocument(b *testing.B) {
135+
// for i := 0; i < b.N; i++ {
136+
// _, _ = MarshalDocument(encodetestInstance)
137+
// }
138+
// }
147139

148140
func BenchmarkEncodingv2Nested(b *testing.B) {
149141
for i := 0; i < b.N; i++ {
150-
_, _ = Marshalv2(nestedInstance)
142+
_, _ = Marshal(nestedInstance)
151143
}
152144
}
153145

154146
func BenchmarkEncodingv2ToDocumentNested(b *testing.B) {
155147
var buf []byte
156148
for i := 0; i < b.N; i++ {
157-
buf, _ = Marshalv2(nestedInstance)
158-
_, _ = ReadDocument(buf)
149+
buf, _ = Marshal(nestedInstance)
150+
_, _ = bson.ReadDocument(buf)
159151
}
160152
}
161153

162-
func BenchmarkEncodingDocumentNested(b *testing.B) {
163-
for i := 0; i < b.N; i++ {
164-
_, _ = MarshalDocument(nestedInstance)
165-
}
166-
}
154+
// func BenchmarkEncodingDocumentNested(b *testing.B) {
155+
// for i := 0; i < b.N; i++ {
156+
// _, _ = MarshalDocument(nestedInstance)
157+
// }
158+
// }

0 commit comments

Comments
 (0)