improved benchmark test for db.go

This commit is contained in:
Lunny Xiao 2014-01-27 21:01:52 +08:00
parent f1a4636699
commit e28f65b0ce
3 changed files with 31 additions and 13 deletions

1
core/benchmark.sh Executable file
View File

@ -0,0 +1 @@
go test -v -bench=. -run=XXX

View File

@ -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

View File

@ -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()