public Tuple next()

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;
    }