in tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java [160:277]
public Tuple next() throws IOException {
while (buffer.remaining() < SYNC_SIZE) {
if (fillBuffer() < 0) {
return null;
}
}
buffer.mark();
if (!checkSync()) {
buffer.reset();
} else {
if (bufferStartPos + buffer.position() > end) {
return null;
}
}
while (buffer.remaining() < tupleHeaderSize) {
if (fillBuffer() < 0) {
return null;
}
}
int i;
tuple = new VTuple(schema.size());
int nullFlagSize = buffer.getShort();
byte[] nullFlagBytes = new byte[nullFlagSize];
buffer.get(nullFlagBytes, 0, nullFlagSize);
nullFlags = new BitArray(nullFlagBytes);
int tupleSize = buffer.getShort();
while (buffer.remaining() < (tupleSize)) {
if (fillBuffer() < 0) {
return null;
}
}
Datum datum;
Column col;
for (i = 0; i < schema.size(); i++) {
if (!nullFlags.get(i)) {
col = schema.getColumn(i);
switch (col.getDataType().getType()) {
case BOOLEAN :
datum = DatumFactory.createBool(buffer.get());
tuple.put(i, datum);
break;
case BIT:
datum = DatumFactory.createBit(buffer.get());
tuple.put(i, datum );
break;
case CHAR :
int realLen = buffer.getInt();
byte[] buf = new byte[col.getDataType().getLength()];
buffer.get(buf);
byte[] charBuf = Arrays.copyOf(buf, realLen);
tuple.put(i, DatumFactory.createChar(charBuf));
break;
case INT2 :
datum = DatumFactory.createInt2(buffer.getShort());
tuple.put(i, datum );
break;
case INT4 :
datum = DatumFactory.createInt4(buffer.getInt());
tuple.put(i, datum );
break;
case INT8 :
datum = DatumFactory.createInt8(buffer.getLong());
tuple.put(i, datum );
break;
case FLOAT4 :
datum = DatumFactory.createFloat4(buffer.getFloat());
tuple.put(i, datum);
break;
case FLOAT8 :
datum = DatumFactory.createFloat8(buffer.getDouble());
tuple.put(i, datum);
break;
case TEXT:
short bytelen = buffer.getShort();
byte[] strbytes = new byte[bytelen];
buffer.get(strbytes, 0, bytelen);
datum = DatumFactory.createText(strbytes);
tuple.put(i, datum);
break;
case BLOB:
short bytesLen = buffer.getShort();
byte [] bytesBuf = new byte[bytesLen];
buffer.get(bytesBuf);
datum = DatumFactory.createBlob(bytesBuf);
tuple.put(i, datum);
break;
case INET4 :
byte[] ipv4 = new byte[4];
buffer.get(ipv4, 0, 4);
datum = DatumFactory.createInet4(ipv4);
tuple.put(i, datum);
break;
default:
break;
}
} else {
tuple.put(i, DatumFactory.createNullDatum());
}
}
return tuple;
}