use of com.pingcap.tikv.exception.TypeException in project tispark by pingcap.
the class TypedKey method next.
/**
* Next TypedKey be truncated with prefixLength
*
* @return next TypedKey with same prefix length
*/
@Override
public TypedKey next() {
DataType tp = getType();
Object val = getValue();
if (tp instanceof StringType) {
return toTypedKey(prefixNext(((String) val).getBytes()), type, prefixLength);
} else if (tp instanceof BytesType) {
return toTypedKey(prefixNext(((byte[]) val)), type, prefixLength);
} else if (DataType.isLengthUnSpecified(prefixLength)) {
if (tp instanceof IntegerType) {
return toTypedKey(((long) val) + 1, type);
} else {
// use byte array type when next key is hard to identify
return toRawTypedKey(prefixNext(value), type);
}
} else {
throw new TypeException("When prefix length is defined, type for TypedKey in next() function must be either String or Byte array. Actual: " + val.getClass().getName());
}
}
use of com.pingcap.tikv.exception.TypeException in project tispark by pingcap.
the class RowEncoderV2 method encodeValue.
private void encodeValue(CodecDataOutput cdo, Object value, DataType tp) {
switch(tp.getType()) {
case TypeLonglong:
case TypeLong:
case TypeInt24:
case TypeShort:
case TypeTiny:
// TODO: encode consider unsigned
encodeInt(cdo, (long) value);
break;
case TypeFloat:
case TypeDouble:
if (value instanceof Double) {
encodeDouble(cdo, value);
} else if (value instanceof Float) {
encodeFloat(cdo, value);
} else {
throw new TypeException("type does not match in encoding, should be float/double");
}
break;
case TypeString:
case TypeVarString:
case TypeVarchar:
case TypeBlob:
case TypeTinyBlob:
case TypeMediumBlob:
case TypeLongBlob:
encodeString(cdo, value);
break;
case TypeNewDecimal:
DecimalType decimalType = (DecimalType) tp;
encodeDecimal(cdo, value, (int) decimalType.getLength(), decimalType.getDecimal());
break;
case TypeBit:
encodeBit(cdo, value);
break;
case TypeTimestamp:
encodeTimestamp(cdo, value, DateTimeZone.UTC);
break;
case TypeDate:
case TypeDatetime:
encodeTimestamp(cdo, value, Converter.getLocalTimezone());
break;
case TypeDuration:
case TypeYear:
encodeInt(cdo, (long) value);
break;
case TypeEnum:
encodeEnum(cdo, value, tp.getElems());
break;
case TypeSet:
encodeSet(cdo, value, tp.getElems());
break;
case TypeJSON:
encodeJson(cdo, value);
break;
case TypeNull:
// ??
case TypeDecimal:
case TypeGeometry:
case TypeNewDate:
throw new CodecException("type should not appear in encoding");
default:
throw new CodecException("invalid data type: " + tp.getType().name());
}
}
use of com.pingcap.tikv.exception.TypeException in project tispark by pingcap.
the class IndexKey method encode.
private static byte[] encode(long tableId, long indexId, Key[] dataKeys) {
CodecDataOutput cdo = new CodecDataOutput();
cdo.write(TBL_PREFIX);
IntegerCodec.writeLong(cdo, tableId);
cdo.write(IDX_PREFIX_SEP);
IntegerCodec.writeLong(cdo, indexId);
for (Key key : dataKeys) {
if (key == null) {
throw new TypeException("key cannot be null");
}
cdo.write(key.getBytes());
}
return cdo.toBytes();
}
use of com.pingcap.tikv.exception.TypeException in project tispark by pingcap.
the class DataTypeFactory method extractTypeMap.
private static void extractTypeMap(MySQLType[] types, Class<? extends DataType> cls, ImmutableMap.Builder<MySQLType, Constructor<? extends DataType>> holderBuilder, ImmutableMap.Builder<MySQLType, DataType> instBuilder) {
for (MySQLType type : types) {
try {
Constructor ctorByHolder = cls.getDeclaredConstructor(InternalTypeHolder.class);
Constructor ctorByType = cls.getDeclaredConstructor(MySQLType.class);
ctorByHolder.setAccessible(true);
ctorByType.setAccessible(true);
holderBuilder.put(type, ctorByHolder);
instBuilder.put(type, (DataType) ctorByType.newInstance(type));
} catch (Exception e) {
throw new TypeException(String.format("Type %s does not have a proper constructor", cls.getName()), e);
}
}
}
use of com.pingcap.tikv.exception.TypeException in project tispark by pingcap.
the class DataTypeFactory method of.
public static DataType of(InternalTypeHolder holder) {
MySQLType type = MySQLType.fromTypeCode(holder.getTp());
type = convertType(type, holder);
Constructor<? extends DataType> ctor = dataTypeCreatorMap.get(type);
if (ctor == null) {
throw new NullPointerException("tp " + holder.getTp() + " passed in can not retrieved DataType info.");
}
try {
return ctor.newInstance(holder);
} catch (Exception e) {
throw new TypeException("Cannot create type from " + holder.getTp(), e);
}
}
Aggregations