From e9dc21634438aadde90e57877fb42da9e0ff9746 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 11 Apr 2017 19:38:54 +0800 Subject: [PATCH] bug fixed #565 --- convert.go | 50 ++++++++++++++++++++++++++++++++++++++++++++ engine.go | 2 +- session_get_test.go | 51 --------------------------------------------- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/convert.go b/convert.go index 5748e379..fbd24b5b 100644 --- a/convert.go +++ b/convert.go @@ -284,3 +284,53 @@ func asKind(vv reflect.Value, tp reflect.Type) (interface{}, error) { } return nil, fmt.Errorf("unsupported primary key type: %v, %v", tp, vv) } + +func convertFloat(v interface{}) (float64, error) { + switch v.(type) { + case float32: + return float64(v.(float32)), nil + case float64: + return v.(float64), nil + case string: + i, err := strconv.ParseFloat(v.(string), 64) + if err != nil { + return 0, err + } + return i, nil + case []byte: + i, err := strconv.ParseFloat(string(v.([]byte)), 64) + if err != nil { + return 0, err + } + return i, nil + } + return 0, fmt.Errorf("unsupported type: %v", v) +} + +func convertInt(v interface{}) (int64, error) { + switch v.(type) { + case int: + return int64(v.(int)), nil + case int8: + return int64(v.(int8)), nil + case int16: + return int64(v.(int16)), nil + case int32: + return int64(v.(int32)), nil + case int64: + return v.(int64), nil + case []byte: + i, err := strconv.ParseInt(string(v.([]byte)), 10, 64) + if err != nil { + return 0, err + } + return i, nil + case string: + i, err := strconv.ParseInt(v.(string), 10, 64) + if err != nil { + return 0, err + } + return i, nil + } + return 0, fmt.Errorf("unsupported type: %v", v) +} diff --git a/engine.go b/engine.go index 533e1930..56da8c5d 100644 --- a/engine.go +++ b/engine.go @@ -936,7 +936,7 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { } ctx.tagName = k[:pStart] - ctx.params = strings.Split(k[pStart+1:len(k)-1], ",") + ctx.params = strings.Split(key[pStart+1:len(k)-1], ",") } if j > 0 { diff --git a/session_get_test.go b/session_get_test.go index a41fbccb..b1fb6bc9 100644 --- a/session_get_test.go +++ b/session_get_test.go @@ -6,7 +6,6 @@ package xorm import ( "fmt" - "strconv" "testing" "time" @@ -100,53 +99,3 @@ func TestGetVar(t *testing.T) { assert.NoError(t, err) assert.Equal(t, "1.5", fmt.Sprintf("%v", v4)) } - -func convertFloat(v interface{}) (float64, error) { - switch v.(type) { - case float32: - return float64(v.(float32)), nil - case float64: - return v.(float64), nil - case string: - i, err := strconv.ParseFloat(v.(string), 64) - if err != nil { - return 0, err - } - return i, nil - case []byte: - i, err := strconv.ParseFloat(string(v.([]byte)), 64) - if err != nil { - return 0, err - } - return i, nil - } - return 0, fmt.Errorf("unsupported type: %v", v) -} - -func convertInt(v interface{}) (int64, error) { - switch v.(type) { - case int: - return int64(v.(int)), nil - case int8: - return int64(v.(int8)), nil - case int16: - return int64(v.(int16)), nil - case int32: - return int64(v.(int32)), nil - case int64: - return v.(int64), nil - case []byte: - i, err := strconv.ParseInt(string(v.([]byte)), 10, 64) - if err != nil { - return 0, err - } - return i, nil - case string: - i, err := strconv.ParseInt(v.(string), 10, 64) - if err != nil { - return 0, err - } - return i, nil - } - return 0, fmt.Errorf("unsupported type: %v", v) -}