This commit is contained in:
boyce
2019-02-01 16:12:38 +08:00
3 changed files with 58 additions and 59 deletions

View File

@@ -26,6 +26,9 @@ type DBResult struct {
LastInsertID int64
RowsAffected int64
res *sql.Rows
// 解码数据相关设置
tag string
blur bool
}
// Next ...
@@ -44,39 +47,24 @@ func (slf *DBResult) Scan(arg ...interface{}) error {
return slf.res.Scan(arg...)
}
// SQLDecoder ...
type SQLDecoder struct {
res DBResult
tag string
strict bool
}
// NewSQLDecoder ...
func NewSQLDecoder(res DBResult) *SQLDecoder {
return &SQLDecoder{
res: res,
tag: "col",
}
}
// SetSpecificTag ...
func (slf *SQLDecoder) SetSpecificTag(tag string) *SQLDecoder {
func (slf *DBResult) SetSpecificTag(tag string) *DBResult {
slf.tag = tag
return slf
}
// SetStrictMode ...
func (slf *SQLDecoder) SetStrictMode(strict bool) *SQLDecoder {
slf.strict = strict
// SetBlurMode ...
func (slf *DBResult) SetBlurMode(blur bool) *DBResult {
slf.blur = blur
return slf
}
// UnMarshal ...
func (slf *SQLDecoder) UnMarshal(out interface{}) error {
if slf.res.Err != nil {
return slf.res.Err
func (slf *DBResult) UnMarshal(out interface{}) error {
if slf.Err != nil {
return slf.Err
}
tbm, err := dbResult2Map(slf.res.res)
tbm, err := dbResult2Map(slf.res)
if err != nil {
return err
}
@@ -123,7 +111,7 @@ func dbResult2Map(rows *sql.Rows) ([]map[string]string, error) {
return tableData, nil
}
func (slf *SQLDecoder) mapSingle2interface(m map[string]string, v reflect.Value) error {
func (slf *DBResult) mapSingle2interface(m map[string]string, v reflect.Value) error {
t := v.Type()
val := v.Elem()
typ := t.Elem()
@@ -144,7 +132,7 @@ func (slf *SQLDecoder) mapSingle2interface(m map[string]string, v reflect.Value)
vtag := strings.Split(strings.ToLower(tag), ",")
meta, ok := m[vtag[0]]
if !ok {
if slf.strict {
if !slf.blur {
return fmt.Errorf("没有在结果集中找到对应的字段 %s", tag)
}
continue
@@ -190,7 +178,7 @@ func (slf *SQLDecoder) mapSingle2interface(m map[string]string, v reflect.Value)
return nil
}
func (slf *SQLDecoder) mapSlice2interface(data []map[string]string, in interface{}) error {
func (slf *DBResult) mapSlice2interface(data []map[string]string, in interface{}) error {
length := len(data)
if length > 0 {
@@ -218,7 +206,7 @@ func (slf *SQLDecoder) mapSlice2interface(data []map[string]string, in interface
}
// Connect ...
func (slf *DBModule) Connect() error {
func (slf *DBModule) Connect(maxConn int) error {
cmd := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=%s",
slf.UserName,
slf.Password,
@@ -237,6 +225,10 @@ func (slf *DBModule) Connect() error {
return err
}
slf.db = db
db.SetMaxOpenConns(maxConn)
db.SetMaxIdleConns(maxConn)
db.SetConnMaxLifetime(time.Second * 90)
return nil
}

View File

@@ -0,0 +1,39 @@
package sysmodule_test
import (
"testing"
"github.com/duanhf2012/origin/sysmodule"
_ "github.com/go-sql-driver/mysql"
)
func TestDBModule(t *testing.T) {
db := sysmodule.DBModule{
URL: "192.168.0.5:3306",
UserName: "root",
Password: "Root!!2018",
DBName: "QuantFundsDB",
}
db.Connect(100)
res := db.Query("select * from tbl_fun_heelthrow where id >= 1")
if res.Err != nil {
t.Error(res.Err)
}
out := []struct {
Addtime int64 `json:"addtime"`
Tname string `json:"tname"`
Uuid string `json:"uuid,omitempty"`
AAAA string `json:"xxx"`
}{}
err := res.SetSpecificTag("json").SetBlurMode(true).UnMarshal(&out)
if err != nil {
t.Error(err)
}
sres := db.SyncQuery("select * from tbl_fun_heelthrow where id >= 1")
res = sres.Get(1000)
if res.Err != nil {
t.Error(res.Err)
}
}

View File

@@ -6,7 +6,6 @@ import (
"testing"
"github.com/duanhf2012/origin/sysmodule"
_ "github.com/go-sql-driver/mysql"
)
func TestHttpClientPoolModule(t *testing.T) {
@@ -28,34 +27,3 @@ func TestHttpClientPoolModule(t *testing.T) {
fmt.Println(rsp1.Status)
fmt.Println(string(rsp1.Body))
}
func TestDBModule(t *testing.T) {
db := sysmodule.DBModule{
URL: "192.168.0.5:3306",
UserName: "root",
Password: "Root!!2018",
DBName: "QuantFundsDB",
}
db.Connect()
res := db.Query("select * from tbl_fun_heelthrow where id >= 1")
if res.Err != nil {
t.Error(res.Err)
}
out := []struct {
Addtime int64 `json:"addtime"`
Tname string `json:"tname"`
Uuid string `json:"uuid,omitempty"`
AAAA string `json:"-"`
}{}
err := sysmodule.NewSQLDecoder(res).SetSpecificTag("json").SetStrictMode(true).UnMarshal(&out)
if err != nil {
t.Error(err)
}
sres := db.SyncQuery("select * from tbl_fun_heelthrow where id >= 1")
res = sres.Get(1000)
if res.Err != nil {
t.Error(res.Err)
}
}