Search in sources :

Example 1 with TypeException

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());
    }
}
Also used : IntegerType(com.pingcap.tikv.types.IntegerType) StringType(com.pingcap.tikv.types.StringType) DataType(com.pingcap.tikv.types.DataType) TypeException(com.pingcap.tikv.exception.TypeException) BytesType(com.pingcap.tikv.types.BytesType)

Example 2 with TypeException

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());
    }
}
Also used : DecimalType(com.pingcap.tikv.types.DecimalType) TypeException(com.pingcap.tikv.exception.TypeException) CodecException(com.pingcap.tikv.exception.CodecException)

Example 3 with TypeException

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();
}
Also used : CodecDataOutput(com.pingcap.tikv.codec.CodecDataOutput) TypeException(com.pingcap.tikv.exception.TypeException)

Example 4 with TypeException

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);
        }
    }
}
Also used : Constructor(java.lang.reflect.Constructor) TypeException(com.pingcap.tikv.exception.TypeException) TypeException(com.pingcap.tikv.exception.TypeException)

Example 5 with TypeException

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);
    }
}
Also used : TypeException(com.pingcap.tikv.exception.TypeException) TypeException(com.pingcap.tikv.exception.TypeException)

Aggregations

TypeException (com.pingcap.tikv.exception.TypeException)5 CodecDataOutput (com.pingcap.tikv.codec.CodecDataOutput)1 CodecException (com.pingcap.tikv.exception.CodecException)1 BytesType (com.pingcap.tikv.types.BytesType)1 DataType (com.pingcap.tikv.types.DataType)1 DecimalType (com.pingcap.tikv.types.DecimalType)1 IntegerType (com.pingcap.tikv.types.IntegerType)1 StringType (com.pingcap.tikv.types.StringType)1 Constructor (java.lang.reflect.Constructor)1