177 lines
3.1 KiB
Go
177 lines
3.1 KiB
Go
package tests
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
type BigStruct struct {
|
|
Id int64
|
|
Name string
|
|
Title string
|
|
Age string
|
|
Alias string
|
|
NickName string
|
|
}
|
|
|
|
func DoBenchDriverInsert(db *sql.DB, b *testing.B) {
|
|
b.StartTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_, err := db.Exec(`insert into big_struct (name, title, age, alias, nick_name)
|
|
values ('fafdasf', 'fadfa', 'afadfsaf', 'fadfafdsafd', 'fadfafdsaf')`)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
b.StopTimer()
|
|
}
|
|
|
|
func DoBenchDriverFind(db *sql.DB, b *testing.B) {
|
|
b.StopTimer()
|
|
for i := 0; i < 50; i++ {
|
|
_, err := db.Exec(`insert into big_struct (name, title, age, alias, nick_name)
|
|
values ('fafdasf', 'fadfa', 'afadfsaf', 'fadfafdsafd', 'fadfafdsaf')`)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N/50; i++ {
|
|
rows, err := db.Query("select * from big_struct limit 50")
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
for rows.Next() {
|
|
s := &BigStruct{}
|
|
rows.Scan(&s.Id, &s.Name, &s.Title, &s.Age, &s.Alias, &s.NickName)
|
|
}
|
|
}
|
|
b.StopTimer()
|
|
}
|
|
|
|
func DoBenchDriver(newdriver func() (*sql.DB, error), createTableSql,
|
|
dropTableSql string, opFunc func(*sql.DB, *testing.B), t *testing.B) {
|
|
db, err := newdriver()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
defer db.Close()
|
|
|
|
_, err = db.Exec(createTableSql)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
opFunc(db, t)
|
|
|
|
_, err = db.Exec(dropTableSql)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func DoBenchInsert(engine *xorm.Engine, b *testing.B) {
|
|
b.StopTimer()
|
|
bs := &BigStruct{0, "fafdasf", "fadfa", "afadfsaf", "fadfafdsafd", "fadfafdsaf"}
|
|
err := engine.CreateTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
bs.Id = 0
|
|
_, err = engine.Insert(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
b.StopTimer()
|
|
err = engine.DropTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func DoBenchFind(engine *xorm.Engine, b *testing.B) {
|
|
b.StopTimer()
|
|
bs := &BigStruct{0, "fafdasf", "fadfa", "afadfsaf", "fadfafdsafd", "fadfafdsaf"}
|
|
err := engine.CreateTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
|
|
for i := 0; i < 100; i++ {
|
|
bs.Id = 0
|
|
_, err = engine.Insert(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N/50; i++ {
|
|
bss := new([]BigStruct)
|
|
err = engine.Limit(50).Find(bss)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
b.StopTimer()
|
|
err = engine.DropTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func DoBenchFindPtr(engine *xorm.Engine, b *testing.B) {
|
|
b.StopTimer()
|
|
bs := &BigStruct{0, "fafdasf", "fadfa", "afadfsaf", "fadfafdsafd", "fadfafdsaf"}
|
|
err := engine.CreateTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
|
|
for i := 0; i < 100; i++ {
|
|
bs.Id = 0
|
|
_, err = engine.Insert(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
b.StartTimer()
|
|
for i := 0; i < b.N/50; i++ {
|
|
bss := new([]*BigStruct)
|
|
err = engine.Limit(50).Find(bss)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|
|
b.StopTimer()
|
|
err = engine.DropTables(bs)
|
|
if err != nil {
|
|
b.Error(err)
|
|
return
|
|
}
|
|
}
|