Skip to content

Commit

Permalink
fix bug
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuxiujia committed May 19, 2019
1 parent aa52cfa commit 45f28b6
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 32 deletions.
66 changes: 49 additions & 17 deletions GoMybatisSqlArgTypeConvert.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"bytes"
"fmt"
"reflect"
"strings"
"time"
)

Expand All @@ -15,36 +14,69 @@ type GoMybatisSqlArgTypeConvert struct {
}

//Sql内容类型转换器
func (it GoMybatisSqlArgTypeConvert) Convert(argValue interface{}, argType reflect.Type) string {
if argType == nil {
argType = reflect.TypeOf(argValue)
}
func (it GoMybatisSqlArgTypeConvert) Convert(argValue interface{}) string {
//if argType == nil {
// argType = reflect.TypeOf(argValue)
//}
var argValueV = reflect.ValueOf(argValue)
var argType = argValueV.Type()

if argValue == nil {
return "''"
}
switch argType.Kind() {
case reflect.Bool:

switch argType.String() {
case "string":
var argStr bytes.Buffer
argStr.WriteString(`'`)
argStr.WriteString(argValue.(string))
argStr.WriteString(`'`)
return argStr.String()
case "*string":
var v = argValue.(*string)
if v == nil {
return "''"
}
var argStr bytes.Buffer
argStr.WriteString(`'`)
argStr.WriteString(*v)
argStr.WriteString(`'`)
return argStr.String()
case "bool":
if argValue.(bool) {
return "true"
} else {
return "false"
}
case reflect.String:
case "*bool":
var v = argValue.(*bool)
if v == nil {
return "''"
}
if *v {
return "true"
} else {
return "false"
}
case "time.Time":
var argStr bytes.Buffer
argStr.WriteString(`'`)
argStr.WriteString(argValue.(string))
argStr.WriteString(argValue.(time.Time).Format(Adapter_FormateDate))
argStr.WriteString(`'`)
return argStr.String()
case reflect.Struct:
if strings.Contains(argType.String(), "time.Time") {
var argStr bytes.Buffer
argStr.WriteString(`'`)
argStr.WriteString(argValue.(time.Time).Format(Adapter_FormateDate))
argStr.WriteString(`'`)
return argStr.String()
case "*time.Time":
var timePtr = argValue.(*time.Time)
if timePtr == nil {
return "''"
}
break
var argStr bytes.Buffer
argStr.WriteString(`'`)
argStr.WriteString(timePtr.Format(Adapter_FormateDate))
argStr.WriteString(`'`)
return argStr.String()

}

return it.toString(argValue, argType)
}

Expand Down
20 changes: 9 additions & 11 deletions GoMybatisSqlArgTypeConvert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,29 @@ package GoMybatis

import (
"fmt"
"reflect"
"testing"
"time"
)

func Test_SqlArgTypeConvert(t *testing.T) {
var a = true
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(a, reflect.TypeOf(a))
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(a)
if convertResult != "true" {
t.Fatal(`Test_Adapter fail convertResult != true`)
}
fmt.Println(convertResult)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1, reflect.TypeOf(1))
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1)
if convertResult != "1" {
t.Fatal(`Test_Adapter fail convertResult != 1`)
}
fmt.Println(convertResult)
var now = time.Now()
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(now, nil)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(now)
if convertResult != "'"+now.Format(Adapter_FormateDate)+"'" {
t.Fatal(`Test_Adapter fail convertResult != 2019-05-10 11:09:01`)
}
fmt.Println(convertResult)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert("string", reflect.TypeOf("string"))
convertResult = GoMybatisSqlArgTypeConvert{}.Convert("string")
if convertResult != "'string'" {
t.Fatal(`Test_Adapter fail convertResult != string`)
}
Expand All @@ -34,22 +33,22 @@ func Test_SqlArgTypeConvert(t *testing.T) {

func Test_SqlArgTypeConvert_NoType(t *testing.T) {
var a = true
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(a, nil)
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(a)
if convertResult == "" {
t.Fatal(`Test_Adapter fail convertResult != true`)
}
fmt.Println(convertResult)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1, nil)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1)
if convertResult == "" {
t.Fatal(`Test_Adapter fail convertResult != 1`)
}
fmt.Println(convertResult)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(time.Now(), nil)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert(time.Now())
if convertResult == "" {
t.Fatal(`Test_Adapter fail convertResult != time.Time`)
}
fmt.Println(convertResult)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert("string", nil)
convertResult = GoMybatisSqlArgTypeConvert{}.Convert("string")
if convertResult == "" {
t.Fatal(`Test_Adapter fail convertResult != string`)
}
Expand All @@ -58,10 +57,9 @@ func Test_SqlArgTypeConvert_NoType(t *testing.T) {

func BenchmarkGoMybatisSqlArgTypeConvert_Convert(b *testing.B) {
b.StopTimer()
var convertType = reflect.TypeOf(1)
b.StartTimer()
for i := 0; i < b.N; i++ {
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1, convertType)
var convertResult = GoMybatisSqlArgTypeConvert{}.Convert(1)
if convertResult == "" {
b.Fatal("convert fail!")
}
Expand Down
2 changes: 1 addition & 1 deletion ast/RegexReplaceArg.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func Replace(startChar string, findStrs []string, data string, typeConvert SqlAr
}
var resultStr string
if typeConvert != nil {
resultStr = typeConvert.Convert(evalData, nil)
resultStr = typeConvert.Convert(evalData)
} else {
resultStr = fmt.Sprint(evalData)
}
Expand Down
4 changes: 1 addition & 3 deletions ast/SqlArgTypeConvert.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package ast

import "reflect"

//表达式类型(基本类型)转换函数
type SqlArgTypeConvert interface {
Convert(arg interface{},argType reflect.Type) string
Convert(arg interface{}) string
}

0 comments on commit 45f28b6

Please sign in to comment.