1
1
package bench
2
2
3
3
import (
4
- "database/sql"
5
- "github.com/efectn/go-orm-benchmarks/helper"
6
4
"testing"
7
5
6
+ "github.com/efectn/go-orm-benchmarks/helper"
7
+
8
8
"github.com/efectn/go-orm-benchmarks/bench/sqlc/db"
9
+ "github.com/jackc/pgx/v5"
9
10
)
10
11
11
12
type Sqlc struct {
12
13
helper.ORMInterface
13
14
conn * db.Queries
14
- db * sql. DB
15
+ db * pgx. Conn
15
16
}
16
17
17
18
func CreateSqlc () helper.ORMInterface {
@@ -24,7 +25,7 @@ func (sqlc *Sqlc) Name() string {
24
25
25
26
func (sqlc * Sqlc ) Init () error {
26
27
var err error
27
- sqlc .db , err = sql . Open ( "pgx" , helper .OrmSource )
28
+ sqlc .db , err = pgx . Connect ( ctx , helper .OrmSource )
28
29
if err != nil {
29
30
return err
30
31
}
@@ -35,18 +36,39 @@ func (sqlc *Sqlc) Init() error {
35
36
}
36
37
37
38
func (sqlc * Sqlc ) Close () error {
38
- return sqlc .db .Close ()
39
+ return sqlc .db .Close (ctx )
39
40
}
40
41
41
42
func (sqlc * Sqlc ) Insert (b * testing.B ) {
42
43
m := NewModel ()
43
44
45
+ args := db.CreateModelParams {
46
+ Name : m .Name ,
47
+ Title : m .Title ,
48
+ Fax : m .Fax ,
49
+ Web : m .Web ,
50
+ Age : int32 (m .Age ),
51
+ Right : m .Right ,
52
+ Counter : m .Counter ,
53
+ }
54
+
44
55
b .ReportAllocs ()
45
56
b .ResetTimer ()
46
57
47
58
for i := 0 ; i < b .N ; i ++ {
48
59
m .Id = 0
49
- _ , err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
60
+ err := sqlc .conn .CreateModel (ctx , args )
61
+ if err != nil {
62
+ helper .SetError (b , sqlc .Name (), "Insert" , err .Error ())
63
+ }
64
+ }
65
+ }
66
+
67
+ func (sqlc * Sqlc ) InsertMulti (b * testing.B ) {
68
+ ms := make ([]db.InsertMultiParams , 0 , 100 )
69
+ m := NewModel ()
70
+ for i := 0 ; i < 100 ; i ++ {
71
+ ms = append (ms , db.InsertMultiParams {
50
72
Name : m .Name ,
51
73
Title : m .Title ,
52
74
Fax : m .Fax ,
@@ -55,20 +77,22 @@ func (sqlc *Sqlc) Insert(b *testing.B) {
55
77
Right : m .Right ,
56
78
Counter : m .Counter ,
57
79
})
80
+ }
81
+
82
+ b .ReportAllocs ()
83
+ b .ResetTimer ()
84
+
85
+ for i := 0 ; i < b .N ; i ++ {
86
+ _ , err := sqlc .conn .InsertMulti (ctx , ms )
58
87
if err != nil {
59
- helper .SetError (b , sqlc .Name (), "Insert " , err .Error ())
88
+ helper .SetError (b , sqlc .Name (), "InsertMulti " , err .Error ())
60
89
}
61
90
}
62
91
}
63
92
64
- func (sqlc * Sqlc ) InsertMulti (b * testing.B ) {
65
- helper .SetError (b , sqlc .Name (), "InsertMulti" , "bulk-insert is not supported" )
66
- }
67
-
68
93
func (sqlc * Sqlc ) Update (b * testing.B ) {
69
94
m := NewModel ()
70
-
71
- _ , err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
95
+ err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
72
96
Name : m .Name ,
73
97
Title : m .Title ,
74
98
Fax : m .Fax ,
@@ -81,20 +105,21 @@ func (sqlc *Sqlc) Update(b *testing.B) {
81
105
helper .SetError (b , sqlc .Name (), "Update" , err .Error ())
82
106
}
83
107
108
+ args := db.UpdateModelParams {
109
+ Name : m .Name ,
110
+ Title : m .Title ,
111
+ Fax : m .Fax ,
112
+ Web : m .Web ,
113
+ Age : int32 (m .Age ),
114
+ Right : m .Right ,
115
+ Counter : m .Counter ,
116
+ ID : int32 (m .Id ),
117
+ }
84
118
b .ReportAllocs ()
85
119
b .ResetTimer ()
86
120
87
121
for i := 0 ; i < b .N ; i ++ {
88
- err := sqlc .conn .UpdateModel (ctx , db.UpdateModelParams {
89
- Name : m .Name ,
90
- Title : m .Title ,
91
- Fax : m .Fax ,
92
- Web : m .Web ,
93
- Age : int32 (m .Age ),
94
- Right : m .Right ,
95
- Counter : m .Counter ,
96
- ID : int32 (m .Id ),
97
- })
122
+ err := sqlc .conn .UpdateModel (ctx , args )
98
123
if err != nil {
99
124
helper .SetError (b , sqlc .Name (), "Update" , err .Error ())
100
125
}
@@ -104,7 +129,7 @@ func (sqlc *Sqlc) Update(b *testing.B) {
104
129
func (sqlc * Sqlc ) Read (b * testing.B ) {
105
130
m := NewModel ()
106
131
107
- output , err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
132
+ err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
108
133
Name : m .Name ,
109
134
Title : m .Title ,
110
135
Fax : m .Fax ,
@@ -113,7 +138,7 @@ func (sqlc *Sqlc) Read(b *testing.B) {
113
138
Right : m .Right ,
114
139
Counter : m .Counter ,
115
140
})
116
- m .Id = int ( output . ID )
141
+ m .Id = 1
117
142
if err != nil {
118
143
helper .SetError (b , sqlc .Name (), "Read" , err .Error ())
119
144
}
@@ -135,7 +160,7 @@ func (sqlc *Sqlc) ReadSlice(b *testing.B) {
135
160
for i := 0 ; i < 100 ; i ++ {
136
161
m .Id = 0
137
162
138
- _ , err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
163
+ err := sqlc .conn .CreateModel (ctx , db.CreateModelParams {
139
164
Name : m .Name ,
140
165
Title : m .Title ,
141
166
Fax : m .Fax ,
@@ -153,10 +178,7 @@ func (sqlc *Sqlc) ReadSlice(b *testing.B) {
153
178
b .ResetTimer ()
154
179
155
180
for i := 0 ; i < b .N ; i ++ {
156
- _ , err := sqlc .conn .ListModels (ctx , db.ListModelsParams {
157
- ID : 0 ,
158
- Limit : 100 ,
159
- })
181
+ _ , err := sqlc .conn .ListModels (ctx )
160
182
if err != nil {
161
183
helper .SetError (b , sqlc .Name (), "ReadSlice" , err .Error ())
162
184
}
0 commit comments