completed value2Interface implementation for Ptr type
This commit is contained in:
parent
f44f70acd8
commit
dfcf1d7498
46
session.go
46
session.go
|
@ -1729,14 +1729,14 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
switch typeStr {
|
switch typeStr {
|
||||||
case "*string":
|
case "*string":
|
||||||
x := string(data)
|
x := string(data)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*bool":
|
case "*bool":
|
||||||
d := string(data)
|
d := string(data)
|
||||||
v, err := strconv.ParseBool(d)
|
v, err := strconv.ParseBool(d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as bool: " + err.Error())
|
return errors.New("arg " + key + " as bool: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(v).Addr())
|
fieldValue.Set(reflect.ValueOf(&v))
|
||||||
case "*complex64":
|
case "*complex64":
|
||||||
var x complex64
|
var x complex64
|
||||||
err := json.Unmarshal(data, &x)
|
err := json.Unmarshal(data, &x)
|
||||||
|
@ -1744,7 +1744,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
session.Engine.LogSQL(err)
|
session.Engine.LogSQL(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*complex128":
|
case "*complex128":
|
||||||
var x complex128
|
var x complex128
|
||||||
err := json.Unmarshal(data, &x)
|
err := json.Unmarshal(data, &x)
|
||||||
|
@ -1752,13 +1752,13 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
session.Engine.LogSQL(err)
|
session.Engine.LogSQL(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*float64":
|
case "*float64":
|
||||||
x, err := strconv.ParseFloat(string(data), 64)
|
x, err := strconv.ParseFloat(string(data), 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as float64: " + err.Error())
|
return errors.New("arg " + key + " as float64: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*float32":
|
case "*float32":
|
||||||
var x float32
|
var x float32
|
||||||
x1, err := strconv.ParseFloat(string(data), 32)
|
x1, err := strconv.ParseFloat(string(data), 32)
|
||||||
|
@ -1766,7 +1766,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
return errors.New("arg " + key + " as float32: " + err.Error())
|
return errors.New("arg " + key + " as float32: " + err.Error())
|
||||||
}
|
}
|
||||||
x = float32(x1)
|
x = float32(x1)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*time.Time":
|
case "*time.Time":
|
||||||
sdata := strings.TrimSpace(string(data))
|
sdata := strings.TrimSpace(string(data))
|
||||||
var x time.Time
|
var x time.Time
|
||||||
|
@ -1803,14 +1803,14 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
}
|
}
|
||||||
|
|
||||||
v = x
|
v = x
|
||||||
fieldValue.Set(reflect.ValueOf(v).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*uint64":
|
case "*uint64":
|
||||||
var x uint64
|
var x uint64
|
||||||
x, err := strconv.ParseUint(string(data), 10, 64)
|
x, err := strconv.ParseUint(string(data), 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*uint":
|
case "*uint":
|
||||||
var x uint
|
var x uint
|
||||||
x1, err := strconv.ParseUint(string(data), 10, 64)
|
x1, err := strconv.ParseUint(string(data), 10, 64)
|
||||||
|
@ -1818,7 +1818,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
x = uint(x1)
|
x = uint(x1)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*uint32":
|
case "*uint32":
|
||||||
var x uint32
|
var x uint32
|
||||||
x1, err := strconv.ParseUint(string(data), 10, 64)
|
x1, err := strconv.ParseUint(string(data), 10, 64)
|
||||||
|
@ -1826,7 +1826,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
x = uint32(x1)
|
x = uint32(x1)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*uint8":
|
case "*uint8":
|
||||||
var x uint8
|
var x uint8
|
||||||
x1, err := strconv.ParseUint(string(data), 10, 64)
|
x1, err := strconv.ParseUint(string(data), 10, 64)
|
||||||
|
@ -1834,7 +1834,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
x = uint8(x1)
|
x = uint8(x1)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*uint16":
|
case "*uint16":
|
||||||
var x uint16
|
var x uint16
|
||||||
x1, err := strconv.ParseUint(string(data), 10, 64)
|
x1, err := strconv.ParseUint(string(data), 10, 64)
|
||||||
|
@ -1842,7 +1842,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
x = uint16(x1)
|
x = uint16(x1)
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*int64":
|
case "*int64":
|
||||||
sdata := string(data)
|
sdata := string(data)
|
||||||
var x int64
|
var x int64
|
||||||
|
@ -1866,7 +1866,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*int":
|
case "*int":
|
||||||
sdata := string(data)
|
sdata := string(data)
|
||||||
var x int
|
var x int
|
||||||
|
@ -1894,7 +1894,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*int32":
|
case "*int32":
|
||||||
sdata := string(data)
|
sdata := string(data)
|
||||||
var x int32
|
var x int32
|
||||||
|
@ -1922,7 +1922,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*int8":
|
case "*int8":
|
||||||
sdata := string(data)
|
sdata := string(data)
|
||||||
var x int8
|
var x int8
|
||||||
|
@ -1950,7 +1950,7 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
case "*int16":
|
case "*int16":
|
||||||
sdata := string(data)
|
sdata := string(data)
|
||||||
var x int16
|
var x int16
|
||||||
|
@ -1978,9 +1978,10 @@ func (session *Session) bytes2Value(col *Column, fieldValue *reflect.Value, data
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("arg " + key + " as int: " + err.Error())
|
return errors.New("arg " + key + " as int: " + err.Error())
|
||||||
}
|
}
|
||||||
fieldValue.Set(reflect.ValueOf(x).Addr())
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
|
default:
|
||||||
|
return errors.New("unsupported type in Scan: " + reflect.TypeOf(v).String())
|
||||||
}
|
}
|
||||||
fallthrough
|
|
||||||
default:
|
default:
|
||||||
return errors.New("unsupported type in Scan: " + reflect.TypeOf(v).String())
|
return errors.New("unsupported type in Scan: " + reflect.TypeOf(v).String())
|
||||||
}
|
}
|
||||||
|
@ -2116,13 +2117,20 @@ func (session *Session) value2Interface(col *Column, fieldValue reflect.Value) (
|
||||||
}
|
}
|
||||||
return fieldValue.Elem().Interface(), nil
|
return fieldValue.Elem().Interface(), nil
|
||||||
}
|
}
|
||||||
} else if typeStr == "*int64" || typeStr == "*uint64" || intTypes.Search(typeStr) < len(intTypes) {
|
} else if typeStr == "*int64" || intTypes.Search(typeStr) < len(intTypes) {
|
||||||
if fieldValue.IsNil() {
|
if fieldValue.IsNil() {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
} else {
|
} else {
|
||||||
return fieldValue.Elem().Int(), nil
|
return fieldValue.Elem().Int(), nil
|
||||||
}
|
}
|
||||||
|
} else if typeStr == "*uint64" || uintTypes.Search(typeStr) < len(uintTypes) {
|
||||||
|
if fieldValue.IsNil() {
|
||||||
|
return nil, nil
|
||||||
|
} else {
|
||||||
|
return fieldValue.Elem().Uint(), nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fallthrough
|
fallthrough
|
||||||
default:
|
default:
|
||||||
return fieldValue.Interface(), nil
|
return fieldValue.Interface(), nil
|
||||||
|
|
5
table.go
5
table.go
|
@ -111,7 +111,8 @@ var (
|
||||||
BigSerial: true,
|
BigSerial: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
intTypes = sort.StringSlice{"*int", "*int16", "*int32 ", "*int8 ", "*uint", "*uint16", "*uint32", "*uint8"}
|
intTypes = sort.StringSlice{"*int", "*int16", "*int32 ", "*int8 "}
|
||||||
|
uintTypes = sort.StringSlice{"*uint", "*uint16", "*uint32", "*uint8"}
|
||||||
)
|
)
|
||||||
|
|
||||||
var b byte
|
var b byte
|
||||||
|
@ -170,7 +171,7 @@ func ptrType2SQLType(t reflect.Type) (st SQLType, has bool) {
|
||||||
st = SQLType{BigInt, 0, 0}
|
st = SQLType{BigInt, 0, 0}
|
||||||
} else if typeStr == "*time.Time" {
|
} else if typeStr == "*time.Time" {
|
||||||
st = SQLType{DateTime, 0, 0}
|
st = SQLType{DateTime, 0, 0}
|
||||||
} else if intTypes.Search(typeStr) < len(intTypes) {
|
} else if intTypes.Search(typeStr) < len(intTypes) || uintTypes.Search(typeStr) < len(uintTypes) {
|
||||||
st = SQLType{Int, 0, 0}
|
st = SQLType{Int, 0, 0}
|
||||||
} else {
|
} else {
|
||||||
has = false
|
has = false
|
||||||
|
|
Loading…
Reference in New Issue