in pkg/datasource/sql/types/image.go [207:271]
func (c *ColumnImage) UnmarshalJSON(data []byte) error {
var err error
tmpImage := make(map[string]interface{})
if err := json.Unmarshal(data, &tmpImage); err != nil {
return err
}
var (
keyType string
columnType int16
columnName string
value interface{}
actualValue interface{}
)
keyType = tmpImage["keyType"].(string)
columnType = int16(int64(tmpImage["type"].(float64)))
columnName = tmpImage["name"].(string)
value = tmpImage["value"]
if value != nil {
switch JDBCType(columnType) {
case JDBCTypeReal: // 4 Bytes
actualValue = value.(float32)
case JDBCTypeDecimal, JDBCTypeDouble: // 8 Bytes
actualValue = value.(float64)
case JDBCTypeTinyInt: // 1 Bytes
actualValue = int8(value.(float64))
case JDBCTypeSmallInt: // 2 Bytes
actualValue = int16(value.(float64))
case JDBCTypeInteger: // 4 Bytes
actualValue = int32(value.(float64))
case JDBCTypeBigInt: // 8Bytes
actualValue = int64(value.(float64))
case JDBCTypeTimestamp: // 4 Bytes
actualValue, err = time.Parse(time.RFC3339Nano, value.(string))
if err != nil {
return err
}
case JDBCTypeDate: // 3Bytes
actualValue, err = time.Parse(time.RFC3339Nano, value.(string))
if err != nil {
return err
}
case JDBCTypeTime: // 3Bytes
actualValue, err = time.Parse(time.RFC3339Nano, value.(string))
if err != nil {
return err
}
case JDBCTypeChar, JDBCTypeVarchar, JDBCTypeLongVarchar:
var val []byte
if val, err = base64.StdEncoding.DecodeString(value.(string)); err != nil {
val = []byte(value.(string))
}
actualValue = string(val)
case JDBCTypeBinary, JDBCTypeVarBinary, JDBCTypeLongVarBinary, JDBCTypeBit:
actualValue = value
}
}
*c = ColumnImage{
KeyType: ParseIndexType(keyType),
ColumnName: columnName,
ColumnType: JDBCType(columnType),
Value: actualValue,
}
return nil
}