@@ -42,6 +42,7 @@ import (
4242 "fmt"
4343 "testing"
4444
45+ "gorm.io/gorm"
4546 . "github.com/oracle-samples/gorm-oracle/tests/utils"
4647)
4748
@@ -120,3 +121,113 @@ func BenchmarkDelete(b *testing.B) {
120121 DB .Delete (& user )
121122 }
122123}
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