|
@@ -6,6 +6,7 @@ package xorm
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+ "strconv"
|
|
|
"testing"
|
|
"testing"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
@@ -84,8 +85,68 @@ func TestGetVar(t *testing.T) {
|
|
|
has, err = testEngine.Table("get_var").Get(&valuesSliceInter)
|
|
has, err = testEngine.Table("get_var").Get(&valuesSliceInter)
|
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, err)
|
|
|
assert.Equal(t, true, has)
|
|
assert.Equal(t, true, has)
|
|
|
- assert.EqualValues(t, 1, valuesSliceInter[0])
|
|
|
|
|
|
|
+
|
|
|
|
|
+ v1, err := convertInt(valuesSliceInter[0])
|
|
|
|
|
+ assert.NoError(t, err)
|
|
|
|
|
+ assert.EqualValues(t, 1, v1)
|
|
|
|
|
+
|
|
|
assert.Equal(t, "hi", fmt.Sprintf("%s", valuesSliceInter[1]))
|
|
assert.Equal(t, "hi", fmt.Sprintf("%s", valuesSliceInter[1]))
|
|
|
- assert.EqualValues(t, 28, valuesSliceInter[2])
|
|
|
|
|
- assert.Equal(t, "1.5", fmt.Sprintf("%v", valuesSliceInter[3]))
|
|
|
|
|
|
|
+
|
|
|
|
|
+ v3, err := convertInt(valuesSliceInter[2])
|
|
|
|
|
+ assert.NoError(t, err)
|
|
|
|
|
+ assert.EqualValues(t, 28, v3)
|
|
|
|
|
+
|
|
|
|
|
+ v4, err := convertFloat(valuesSliceInter[3])
|
|
|
|
|
+ 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)
|
|
|
}
|
|
}
|