@@ -42,6 +42,7 @@ import (
42
42
"fmt"
43
43
"testing"
44
44
45
+ "gorm.io/gorm"
45
46
. "github.com/oracle-samples/gorm-oracle/tests/utils"
46
47
)
47
48
@@ -120,3 +121,113 @@ func BenchmarkDelete(b *testing.B) {
120
121
DB .Delete (& user )
121
122
}
122
123
}
124
+
125
+ func BenchmarkCreateInBatches (b * testing.B ) {
126
+ users := make ([]User , 100 )
127
+ for i := 0 ; i < len (users ); i ++ {
128
+ users [i ] = * GetUser (fmt .Sprintf ("batch-%d" , i ), Config {})
129
+ }
130
+
131
+ b .ResetTimer ()
132
+ for x := 0 ; x < b .N ; x ++ {
133
+ DB .CreateInBatches (users , 20 )
134
+ }
135
+ }
136
+
137
+ func BenchmarkFirst (b * testing.B ) {
138
+ user := * GetUser ("first" , Config {})
139
+ DB .Create (& user )
140
+
141
+ var u User
142
+ b .ResetTimer ()
143
+ for x := 0 ; x < b .N ; x ++ {
144
+ DB .First (& u , user .ID )
145
+ }
146
+ }
147
+
148
+ func BenchmarkWhere (b * testing.B ) {
149
+ user := * GetUser ("where" , Config {})
150
+ DB .Create (& user )
151
+
152
+ var u User
153
+ b .ResetTimer ()
154
+ for x := 0 ; x < b .N ; x ++ {
155
+ DB .Where ("name = ?" , user .Name ).First (& u )
156
+ }
157
+ }
158
+
159
+ func BenchmarkCount (b * testing.B ) {
160
+ for i := 0 ; i < 1000 ; i ++ {
161
+ user := * GetUser (fmt .Sprintf ("count-%d" , i ), Config {})
162
+ DB .Create (& user )
163
+ }
164
+
165
+ var count int64
166
+ b .ResetTimer ()
167
+ for x := 0 ; x < b .N ; x ++ {
168
+ DB .Model (& User {}).Count (& count )
169
+ }
170
+ }
171
+
172
+ func BenchmarkTransaction (b * testing.B ) {
173
+ for x := 0 ; x < b .N ; x ++ {
174
+ DB .Transaction (func (tx * gorm.DB ) error {
175
+ user := * GetUser (fmt .Sprintf ("tx-%d" , x ), Config {})
176
+ return tx .Create (& user ).Error
177
+ })
178
+ }
179
+ }
180
+
181
+ func BenchmarkJoin (b * testing.B ) {
182
+ user := * GetUser ("join-user" , Config {})
183
+ DB .Create (& user )
184
+
185
+ type Profile struct {
186
+ ID uint
187
+ UserID uint
188
+ Bio string
189
+ }
190
+ DB .AutoMigrate (& Profile {})
191
+ DB .Create (& Profile {UserID : user .ID , Bio : "benchmark profile" })
192
+
193
+ var result struct {
194
+ User
195
+ Profile
196
+ }
197
+
198
+ b .ResetTimer ()
199
+ for x := 0 ; x < b .N ; x ++ {
200
+ DB .Table ("users" ).
201
+ Select ("users.id, users.name, profiles.bio" ).
202
+ Joins ("left join profiles on profiles.user_id = users.id" ).
203
+ Where ("users.id = ?" , user .ID ).
204
+ Scan (& result )
205
+ }
206
+ }
207
+
208
+ func BenchmarkPagination (b * testing.B ) {
209
+ DB .Exec ("delete from users" )
210
+ for i := 0 ; i < 10000 ; i ++ {
211
+ user := * GetUser (fmt .Sprintf ("page-%d" , i ), Config {})
212
+ DB .Create (& user )
213
+ }
214
+
215
+ var users []User
216
+ b .ResetTimer ()
217
+ for x := 0 ; x < b .N ; x ++ {
218
+ DB .Limit (50 ).Offset (200 ).Find (& users )
219
+ }
220
+ }
221
+
222
+ func BenchmarkBulkDelete (b * testing.B ) {
223
+ DB .Exec ("delete from users" )
224
+ for i := 0 ; i < 5000 ; i ++ {
225
+ user := * GetUser (fmt .Sprintf ("bulk-%d" , i ), Config {})
226
+ DB .Create (& user )
227
+ }
228
+
229
+ b .ResetTimer ()
230
+ for x := 0 ; x < b .N ; x ++ {
231
+ DB .Where ("id < ?" , 2500 ).Delete (& User {})
232
+ }
233
+ }
0 commit comments