/
beego.go
130 lines (104 loc) · 2.35 KB
/
beego.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package bench
import (
"fmt"
"github.com/astaxie/beego/orm"
"github.com/efectn/go-orm-benchmarks/helper"
"testing"
)
type Beego struct {
helper.ORMInterface
conn orm.Ormer
}
func CreateBeego() helper.ORMInterface {
return &Beego{}
}
func (beego *Beego) Name() string {
return "beego"
}
func (beego *Beego) Init() error {
err := orm.RegisterDataBase("default", "postgres", helper.OrmSource, helper.OrmMaxIdle, helper.OrmMaxConn)
if err != nil {
return err
}
orm.RegisterModel(new(Model))
beego.conn = orm.NewOrm()
return nil
}
func (beego *Beego) Close() error {
return nil
}
func (beego *Beego) Insert(b *testing.B) {
m := NewModel()
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
m.Id = 0
_, err := beego.conn.Insert(m)
if err != nil {
helper.SetError(b, beego.Name(), "Insert", fmt.Sprintf("beego: insert: %v", err))
}
}
}
func (beego *Beego) InsertMulti(b *testing.B) {
ms := make([]*Model, 0, 100)
for i := 0; i < 100; i++ {
ms = append(ms, NewModel())
}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err := beego.conn.InsertMulti(100, ms)
if err != nil {
helper.SetError(b, beego.Name(), "InsertMulti", err.Error())
}
}
}
func (beego *Beego) Update(b *testing.B) {
m := NewModel()
_, err := beego.conn.Insert(m)
if err != nil {
helper.SetError(b, beego.Name(), "Update", err.Error())
}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err := beego.conn.Update(m)
if err != nil {
helper.SetError(b, beego.Name(), "Update", err.Error())
}
}
}
func (beego *Beego) Read(b *testing.B) {
m := NewModel()
_, err := beego.conn.Insert(m)
if err != nil {
helper.SetError(b, beego.Name(), "Read", err.Error())
}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
err := beego.conn.Read(m)
if err != nil {
helper.SetError(b, beego.Name(), "Read", err.Error())
}
}
}
func (beego *Beego) ReadSlice(b *testing.B) {
m := NewModel()
for i := 0; i < 100; i++ {
m.Id = 0
_, err := beego.conn.Insert(m)
if err != nil {
helper.SetError(b, beego.Name(), "ReadSlice", err.Error())
}
}
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
var models []*Model
_, err := beego.conn.QueryTable("models").Filter("id__gt", 0).Limit(100).All(&models)
if err != nil {
helper.SetError(b, beego.Name(), "ReadSlice", err.Error())
}
}
}