// "}\n" +
// "{ \"integer\" : -2002,\n" +
// " \"float\" : -1.2 \n" +
// "}";
MapVector v = new MapVector("", allocator);
ComplexWriterImpl writer = new ComplexWriterImpl("col", v);
writer.allocate();
DrillBuf buffer = allocator.buffer(255);
JsonReaderWithState jsonReader = new JsonReaderWithState(new ReaderJSONRecordSplitter(compound), buffer,
GroupScan.ALL_COLUMNS, false);
int i =0;
List<Integer> batchSizes = Lists.newArrayList();
outside: while(true) {
writer.setPosition(i);
switch (jsonReader.write(writer)) {
case WRITE_SUCCEED:
i++;
break;
case NO_MORE:
batchSizes.add(i);
System.out.println("no more records - main loop");
break outside;
case WRITE_FAILED:
System.out.println("==== hit bounds at " + i);
//writer.setValueCounts(i - 1);
batchSizes.add(i);
i = 0;
writer.allocate();
writer.reset();
switch(jsonReader.write(writer)) {
case NO_MORE:
System.out.println("no more records - new alloc loop.");
break outside;
case WRITE_FAILED:
throw new RuntimeException("Failure while trying to write.");
case WRITE_SUCCEED:
i++;
};
};
}
int total = 0;
int lastRecordCount = 0;
for (Integer records : batchSizes) {
total += records;
lastRecordCount = records;
}
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
ow.writeValueAsString(v.getAccessor().getObject(0));
ow.writeValueAsString(v.getAccessor().getObject(1));
FieldReader reader = v.get("col", MapVector.class).getAccessor().getReader();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonWriter jsonWriter = new JsonWriter(stream, true);
reader.setPosition(0);
jsonWriter.write(reader);
reader.setPosition(1);
jsonWriter.write(reader);
System.out.print("Json Read: ");
System.out.println(new String(stream.toByteArray(), Charsets.UTF_8));
// System.out.println(compound);
System.out.println("Total Records Written " + batchSizes);
reader.setPosition(lastRecordCount - 2);
assertEquals("goodbye", reader.reader("c").readText().toString());
reader.setPosition(lastRecordCount - 1);
assertEquals("red", reader.reader("c").readText().toString());
assertEquals((repeatSize+1) * 2, total);
writer.clear();
buffer.release();
}