From 45f28b68bfb54ad58b969ac60cda937b63c02708 Mon Sep 17 00:00:00 2001 From: zhuxiujia Date: Mon, 20 May 2019 01:06:12 +0800 Subject: [PATCH] fix bug --- GoMybatisSqlArgTypeConvert.go | 66 ++++++++++++++++++++++-------- GoMybatisSqlArgTypeConvert_test.go | 20 ++++----- ast/RegexReplaceArg.go | 2 +- ast/SqlArgTypeConvert.go | 4 +- 4 files changed, 60 insertions(+), 32 deletions(-) diff --git a/GoMybatisSqlArgTypeConvert.go b/GoMybatisSqlArgTypeConvert.go index 13b1671..29e4962 100644 --- a/GoMybatisSqlArgTypeConvert.go +++ b/GoMybatisSqlArgTypeConvert.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "reflect" - "strings" "time" ) @@ -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) } diff --git a/GoMybatisSqlArgTypeConvert_test.go b/GoMybatisSqlArgTypeConvert_test.go index ce65fcf..2e97ef1 100644 --- a/GoMybatisSqlArgTypeConvert_test.go +++ b/GoMybatisSqlArgTypeConvert_test.go @@ -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`) } @@ -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`) } @@ -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!") } diff --git a/ast/RegexReplaceArg.go b/ast/RegexReplaceArg.go index 745d528..2a36210 100644 --- a/ast/RegexReplaceArg.go +++ b/ast/RegexReplaceArg.go @@ -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) } diff --git a/ast/SqlArgTypeConvert.go b/ast/SqlArgTypeConvert.go index f0879ce..a699af9 100644 --- a/ast/SqlArgTypeConvert.go +++ b/ast/SqlArgTypeConvert.go @@ -1,8 +1,6 @@ package ast -import "reflect" - //表达式类型(基本类型)转换函数 type SqlArgTypeConvert interface { - Convert(arg interface{},argType reflect.Type) string + Convert(arg interface{}) string }