improved benchmark test for db.go
This commit is contained in:
parent
f1a4636699
commit
e28f65b0ce
|
@ -0,0 +1 @@
|
||||||
|
go test -v -bench=. -run=XXX
|
|
@ -93,7 +93,7 @@ func (rs *Rows) ScanStruct2(dest interface{}) error {
|
||||||
if !ok {
|
if !ok {
|
||||||
cache = make(map[string]int)
|
cache = make(map[string]int)
|
||||||
for i := 0; i < vvv.NumField(); i++ {
|
for i := 0; i < vvv.NumField(); i++ {
|
||||||
cache[vvv.Type().Field(i).Name] = i
|
cache[rs.Mapper.Obj2Table(vvv.Type().Field(i).Name)] = i
|
||||||
}
|
}
|
||||||
fieldCacheMutex.Lock()
|
fieldCacheMutex.Lock()
|
||||||
fieldCache[t] = cache
|
fieldCache[t] = cache
|
||||||
|
@ -103,7 +103,7 @@ func (rs *Rows) ScanStruct2(dest interface{}) error {
|
||||||
newDest := make([]interface{}, len(cols))
|
newDest := make([]interface{}, len(cols))
|
||||||
var v EmptyScanner
|
var v EmptyScanner
|
||||||
for j, name := range cols {
|
for j, name := range cols {
|
||||||
if i, ok := cache[rs.Mapper.Table2Obj(name)]; ok {
|
if i, ok := cache[name]; ok {
|
||||||
newDest[j] = vvv.Field(i).Addr().Interface()
|
newDest[j] = vvv.Field(i).Addr().Interface()
|
||||||
} else {
|
} else {
|
||||||
newDest[j] = &v
|
newDest[j] = &v
|
||||||
|
@ -141,7 +141,8 @@ func (rs *Rows) ScanSlice(dest interface{}) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, _ := range cols {
|
srcLen := vvv.Len()
|
||||||
|
for i := srcLen; i < len(cols); i++ {
|
||||||
vvv = reflect.Append(vvv, reflect.ValueOf(newDest[i]).Elem())
|
vvv = reflect.Append(vvv, reflect.ValueOf(newDest[i]).Elem())
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package core
|
package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -98,7 +100,10 @@ func BenchmarkStructQuery(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
//fmt.Println(user)
|
if user.Name != "xlw" {
|
||||||
|
fmt.Println(user)
|
||||||
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rows.Close()
|
rows.Close()
|
||||||
}
|
}
|
||||||
|
@ -140,7 +145,10 @@ func BenchmarkStruct2Query(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
//fmt.Println(user)
|
if user.Name != "xlw" {
|
||||||
|
fmt.Println(user)
|
||||||
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rows.Close()
|
rows.Close()
|
||||||
}
|
}
|
||||||
|
@ -186,7 +194,10 @@ func BenchmarkSliceQuery(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
//fmt.Println(slice)
|
if slice[1].(string) != "xlw" {
|
||||||
|
fmt.Println(slice)
|
||||||
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rows.Close()
|
rows.Close()
|
||||||
|
@ -228,7 +239,10 @@ func BenchmarkMapInterfaceQuery(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
//fmt.Println(m)
|
if m["name"].(string) != "xlw" {
|
||||||
|
fmt.Println(m)
|
||||||
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rows.Close()
|
rows.Close()
|
||||||
|
@ -270,9 +284,10 @@ func BenchmarkMapBytesQuery(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
/*for k, v := range m {
|
if string(m["name"]) != "xlw" {
|
||||||
fmt.Printf("%v - %v\n", k, string(v))
|
fmt.Println(m)
|
||||||
}*/
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rows.Close()
|
rows.Close()
|
||||||
|
@ -314,9 +329,10 @@ func BenchmarkMapStringQuery(b *testing.B) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Error(err)
|
b.Error(err)
|
||||||
}
|
}
|
||||||
/*for k, v := range m {
|
if m["name"] != "xlw" {
|
||||||
fmt.Printf("%v - %v\n", k, v)
|
fmt.Println(m)
|
||||||
}*/
|
b.Error(errors.New("name should be xlw"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rows.Close()
|
rows.Close()
|
||||||
|
|
Loading…
Reference in New Issue