protected void flushAndReset() throws HyracksDataException { if (appender.getTupleCount() > 0) { appender.write(writer, true); } }
@Override public void flush() throws HyracksDataException { appender.flush(writer); } };
@Override public ByteBuffer getBuffer() { return lastAppender.getBuffer(); }
@Override public void write(IFrameWriter outWriter, boolean clear) throws HyracksDataException { lastAppender.write(outWriter, clear); } }
private void resetAppenderIfNecessary(IFrameAppender appender) throws HyracksDataException { if (lastAppender != appender) { if (lastAppender == fieldAppender) { if (fieldAppender.hasLeftOverFields()) { throw new HyracksDataException("The previous appended fields haven't been flushed yet."); } } appender.reset(sharedFrame, false); lastAppender = appender; } }
@Override public int getTupleCount() { return lastAppender.getTupleCount(); }
/** * Write currently buffered records to {@code writer} then flushes {@code writer}. The inside frame is always cleared * @param writer the FrameWriter to write to and flush * @throws HyracksDataException */ public default void flush(IFrameWriter writer) throws HyracksDataException { write(writer, true); writer.flush(); } }
protected final void initAccessAppendFieldRef(IHyracksTaskContext ctx) throws HyracksDataException { frame = new VSizeFrame(ctx); appender = new FrameFixedFieldTupleAppender(inputRecordDesc.getFieldCount()); appender.reset(frame, true); tAccess = new FrameTupleAccessor(inputRecordDesc); tRef = new FrameTupleReference(); }
@Override public void flush() throws HyracksDataException { appender.flush(writer); } };
@Override public void flush() throws HyracksDataException { appender.flush(writer); } };
@Override public void flush() throws HyracksDataException { appender.flush(writer); } }
@Override public void flush() throws HyracksDataException { appender.flush(writer); }
@Override public void flush() throws HyracksDataException { appender.flush(writer); }
@Override public void nextFrame(ByteBuffer buffer) throws HyracksDataException { // what if numOfTuples is 0? tAccess.reset(buffer); int nTuple = tAccess.getTupleCount(); if (nTuple == 0) { appender.flush(writer); } else { int t = 0; if (nTuple > 1) { for (; t < nTuple - 1; t++) { appendProjectionToFrame(t, projectionList); } } if (flushFramesRapidly) { // Whenever all the tuples in the incoming frame have been consumed, the project operator // will push its frame to the next operator; i.e., it won't wait until the frame gets full. appendProjectionToFrame(t, projectionList, true); } else { appendProjectionToFrame(t, projectionList); } } }
throw new HyracksDataException("Negative number of tuples in the frame: " + nTuple); appender.flush(writer); } else { if (nTuple > 1) {