in tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java [51:158]
public static Tuple toTuple(Schema schema, byte [] bytes) {
ByteBuffer bb = ByteBuffer.wrap(bytes);
Tuple tuple = new VTuple(schema.size());
Column col;
TajoDataTypes.DataType type;
for (int i =0; i < schema.size(); i++) {
col = schema.getColumn(i);
type = col.getDataType();
switch (type.getType()) {
case BOOLEAN: tuple.put(i, DatumFactory.createBool(bb.get())); break;
case BIT:
byte b = bb.get();
if(b == 0) {
tuple.put(i, DatumFactory.createNullDatum());
} else {
tuple.put(i, DatumFactory.createBit(b));
}
break;
case CHAR:
byte c = bb.get();
if(c == 0) {
tuple.put(i, DatumFactory.createNullDatum());
} else {
tuple.put(i, DatumFactory.createChar(c));
}
break;
case INT2:
short s = bb.getShort();
if(s < Short.MIN_VALUE + 1) {
tuple.put(i, DatumFactory.createNullDatum());
}else {
tuple.put(i, DatumFactory.createInt2(s));
}
break;
case INT4:
case DATE:
int i_ = bb.getInt();
if ( i_ < Integer.MIN_VALUE + 1) {
tuple.put(i, DatumFactory.createNullDatum());
} else {
tuple.put(i, DatumFactory.createFromInt4(type, i_));
}
break;
case INT8:
case TIME:
case TIMESTAMP:
long l = bb.getLong();
if ( l < Long.MIN_VALUE + 1) {
tuple.put(i, DatumFactory.createNullDatum());
}else {
tuple.put(i, DatumFactory.createFromInt8(type, l));
}
break;
case FLOAT4:
float f = bb.getFloat();
if (Float.isNaN(f)) {
tuple.put(i, DatumFactory.createNullDatum());
}else {
tuple.put(i, DatumFactory.createFloat4(f));
}
break;
case FLOAT8:
double d = bb.getDouble();
if(Double.isNaN(d)) {
tuple.put(i, DatumFactory.createNullDatum());
}else {
tuple.put(i, DatumFactory.createFloat8(d));
}
break;
case TEXT:
byte [] _string = new byte[bb.getInt()];
bb.get(_string);
String str = new String(_string);
if(str.compareTo("NULL") == 0) {
tuple.put(i, DatumFactory.createNullDatum());
}else {
tuple.put(i, DatumFactory.createText(str));
}
break;
case BLOB:
byte [] _bytes = new byte[bb.getInt()];
bb.get(_bytes);
if(Bytes.compareTo(bytes, Bytes.toBytes("NULL")) == 0) {
tuple.put(i, DatumFactory.createNullDatum());
} else {
tuple.put(i, DatumFactory.createBlob(_bytes));
}
break;
case INET4:
byte [] _ipv4 = new byte[4];
bb.get(_ipv4);
tuple.put(i, DatumFactory.createInet4(_ipv4));
break;
case INET6:
// TODO - to be implemented
}
}
return tuple;
}