@Override public void serialize(Yielder yielder, final JsonGenerator jgen, SerializerProvider provider) throws IOException { try { jgen.writeStartArray(); while (!yielder.isDone()) { final Object o = yielder.get(); jgen.writeObject(o); yielder = yielder.next(null); } jgen.writeEndArray(); } finally { yielder.close(); } } }
public Meta.Frame nextFrame(final long fetchOffset, final int fetchMaxRowCount) { synchronized (lock) { ensure(State.RUNNING); Preconditions.checkState(fetchOffset == offset, "fetchOffset[%,d] != offset[%,d]", fetchOffset, offset); try { final List<Object> rows = new ArrayList<>(); while (!yielder.isDone() && (fetchMaxRowCount < 0 || offset < fetchOffset + fetchMaxRowCount)) { rows.add(yielder.get()); yielder = yielder.next(null); offset++; } final boolean done = yielder.isDone(); if (done) { close(); } return new Meta.Frame(fetchOffset, done, rows); } catch (Throwable t) { this.throwable = t; try { close(); } catch (Throwable t1) { t.addSuppressed(t1); } throw t; } } }
@Override public void close() throws IOException { yielder.close(); } };
@Override public T get() { return baseYielder.get(); }
@Override public Yielder<T> accumulate(Yielder<T> accumulated, Sequence<T> in) { final Yielder<T> retVal = in.toYielder( null, new YieldingAccumulator<T, T>() { @Override public T accumulate(T accumulated, T in) { yield(); return in; } } ); if (retVal.isDone()) { try { retVal.close(); } catch (IOException e) { throw Throwables.propagate(e); } return null; } else { yield(); } return retVal; } }
@Override public boolean hasNext() { return !yielder.isDone() && count < limit; }
@Override public Yielder<OutType> next(OutType initValue) { return wrapYielder(yielder.next(initValue), accumulator); }
private void check(String expected, Sequence<Integer> complex) { List<Integer> combined = complex.toList(); Assert.assertEquals(expected, combined.toString()); Yielder<Integer> yielder = complex.toYielder( null, new YieldingAccumulator<Integer, Integer>() { @Override public Integer accumulate(Integer accumulated, Integer in) { yield(); return in; } } ); List<Integer> combinedByYielder = new ArrayList<>(); while (!yielder.isDone()) { combinedByYielder.add(yielder.get()); yielder = yielder.next(null); } Assert.assertEquals(expected, combinedByYielder.toString()); }
@Override public void close() throws IOException { rowYielder.close(); }
@Override public T apply(Yielder<T> input) { return input.get(); } }
@Override public boolean hasMore() { return !rowYielder.isDone(); }
@Override public Yielder<OutType> next(OutType initValue) { return wrapYielder(yielder.next(initValue), yielderYielder, accumulator); }
public <OutType> Yielder<OutType> makeYielder( Yielder<Sequence<T>> yielderYielder, OutType initValue, YieldingAccumulator<OutType, T> accumulator ) { while (!yielderYielder.isDone()) { Yielder<OutType> yielder = yielderYielder.get().toYielder(initValue, accumulator); if (accumulator.yielded()) { return wrapYielder(yielder, yielderYielder, accumulator); } initValue = yielder.get(); try { yielder.close(); } catch (IOException e) { throw Throwables.propagate(e); } yielderYielder = yielderYielder.next(null); } return Yielders.done(initValue, yielderYielder); }
public Meta.Frame nextFrame(final long fetchOffset, final int fetchMaxRowCount) { synchronized (lock) { ensure(State.RUNNING); Preconditions.checkState(fetchOffset == offset, "fetchOffset[%,d] != offset[%,d]", fetchOffset, offset); try { final List<Object> rows = new ArrayList<>(); while (!yielder.isDone() && (fetchMaxRowCount < 0 || offset < fetchOffset + fetchMaxRowCount)) { rows.add(yielder.get()); yielder = yielder.next(null); offset++; } final boolean done = yielder.isDone(); if (done) { close(); } return new Meta.Frame(fetchOffset, done, rows); } catch (Throwable t) { try { close(); } catch (Throwable t1) { t.addSuppressed(t1); } throw t; } } }