|
|
@@ -247,3 +247,40 @@ func convertAssign(dest, src interface{}) error {
|
|
|
|
|
|
return fmt.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, dest)
|
|
|
}
|
|
|
+
|
|
|
+func asKind(vv reflect.Value, tp reflect.Type) (interface{}, error) {
|
|
|
+ switch tp.Kind() {
|
|
|
+ case reflect.Int64:
|
|
|
+ return vv.Int(), nil
|
|
|
+ case reflect.Int:
|
|
|
+ return int(vv.Int()), nil
|
|
|
+ case reflect.Int32:
|
|
|
+ return int32(vv.Int()), nil
|
|
|
+ case reflect.Int16:
|
|
|
+ return int16(vv.Int()), nil
|
|
|
+ case reflect.Int8:
|
|
|
+ return int8(vv.Int()), nil
|
|
|
+ case reflect.Uint64:
|
|
|
+ return vv.Uint(), nil
|
|
|
+ case reflect.Uint:
|
|
|
+ return uint(vv.Uint()), nil
|
|
|
+ case reflect.Uint32:
|
|
|
+ return uint32(vv.Uint()), nil
|
|
|
+ case reflect.Uint16:
|
|
|
+ return uint16(vv.Uint()), nil
|
|
|
+ case reflect.Uint8:
|
|
|
+ return uint8(vv.Uint()), nil
|
|
|
+ case reflect.String:
|
|
|
+ return vv.String(), nil
|
|
|
+ case reflect.Slice:
|
|
|
+ if tp.Elem().Kind() == reflect.Uint8 {
|
|
|
+ v, err := strconv.ParseInt(string(vv.Interface().([]byte)), 10, 64)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return v, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return nil, fmt.Errorf("unsupported primary key type: %v, %v", tp, vv)
|
|
|
+}
|