@Override public int getFieldLength(int fIdx) { if (fIdx == 0) { return ShortPointable.getShort(buf, tupleStartOff + nullFlagsBytes); } else { return ShortPointable.getShort(buf, tupleStartOff + nullFlagsBytes + fIdx * 2) - ShortPointable.getShort(buf, tupleStartOff + nullFlagsBytes + ((fIdx - 1) * 2)); } }
@Override public int getFieldStart(int fIdx) { if (fIdx == 0) { return tupleStartOff + nullFlagsBytes + fieldSlotsBytes; } else { return tupleStartOff + nullFlagsBytes + fieldSlotsBytes + ShortPointable.getShort(buf, tupleStartOff + nullFlagsBytes + ((fIdx - 1) * 2)); } }
@Override public int getTupleSize() { return nullFlagsBytes + fieldSlotsBytes + ShortPointable.getShort(buf, tupleStartOff + nullFlagsBytes + (fieldCount - 1) * 2); } }
@Override public double doubleValue() { return getShort(); } }
public static long getYear(byte[] bytes, int start) { return (long) ShortPointable.getShort(bytes, start + YEAR_OFFSET); }
@Override public int hash() { return getShort(); }
@Override public int intValue() { return getShort(); }
@Override public long longValue() { return getShort(); }
@Override public float floatValue() { return getShort(); }
@Override public byte byteValue() { return (byte) getShort(); }
@Override public short shortValue() { return getShort(); }
public static long getYear(byte[] bytes, int start) { return (long) ShortPointable.getShort(bytes, start + YEAR_OFFSET); }
public short getShort() { return getShort(bytes, start); }
public short preIncrement() { short v = getShort(); ++v; setShort(v); return v; }
public short postIncrement() { short v = getShort(); short ov = v++; setShort(v); return ov; }
static long asLong(byte[] data, int start, int length) throws RuntimeDataException { switch (length) { case 1: // TINYINT return BytePointable.getByte(data, start); case 2: // SMALLINT return ShortPointable.getShort(data, start); case 4: // INTEGER return IntegerPointable.getInteger(data, start); case 8: // BIGINT return LongPointable.getLong(data, start); default: throw new RuntimeDataException(ErrorCode.TYPE_CONVERT_INTEGER_SOURCE, Arrays.toString( new ATypeTag[] { ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT })); } }
double convertType(byte[] data, int start, ATypeTag sourceTypeTag) throws HyracksDataException { switch (sourceTypeTag) { case TINYINT: return BytePointable.getByte(data, start); case SMALLINT: return ShortPointable.getShort(data, start); case INTEGER: return IntegerPointable.getInteger(data, start); case BIGINT: return LongPointable.getLong(data, start); default: throw new RuntimeDataException(ErrorCode.TYPE_CONVERT_INTEGER_SOURCE, Arrays.toString( new ATypeTag[] { ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT })); } }
protected long convertIntegerType(byte[] data, int start, ATypeTag sourceTypeTag, ATypeTag targetType) throws HyracksDataException { long num; switch (sourceTypeTag) { case TINYINT: num = BytePointable.getByte(data, start); break; case SMALLINT: num = ShortPointable.getShort(data, start); break; case INTEGER: num = IntegerPointable.getInteger(data, start); break; case BIGINT: num = LongPointable.getLong(data, start); break; default: throw new RuntimeDataException(ErrorCode.TYPE_CONVERT_INTEGER_SOURCE, Arrays.toString( new ATypeTag[] { ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT })); } return validate(num, targetType); }
@Override public void convertType(byte[] data, int start, int length, DataOutput out) throws IOException { float val; // In order to convert a negative number correctly, proper casting per INT type is needed. switch (length) { case 1: // TINYINT val = BytePointable.getByte(data, start); break; case 2: // SMALLINT val = ShortPointable.getShort(data, start); break; case 4: // INTEGER val = IntegerPointable.getInteger(data, start); break; case 8: // BIGINT val = LongPointable.getLong(data, start); break; default: throw new RuntimeDataException(ErrorCode.TYPE_CONVERT_INTEGER_SOURCE, Arrays.toString( new ATypeTag[] { ATypeTag.TINYINT, ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT })); } out.writeByte(ATypeTag.FLOAT.serialize()); FloatSerializerDeserializer.write(val, out); }