public static final String fieldValue = "value";
public static void mappify(FieldReader reader, BaseWriter.ComplexWriter writer, DrillBuf buffer) {
// Currently we expect single map as input
if (!(reader instanceof SingleMapReaderImpl)) {
throw new DrillRuntimeException("kvgen function only supports Simple maps as input");
}
BaseWriter.ListWriter listWriter = writer.rootAsList();
listWriter.start();
BaseWriter.MapWriter mapWriter = listWriter.map();
// Iterate over the fields in the map
Iterator<String> fieldIterator = reader.iterator();
while (fieldIterator.hasNext()) {
String str = fieldIterator.next();
FieldReader fieldReader = reader.reader(str);
// Skip the field if its null
if (fieldReader.isSet() == false) {
mapWriter.end();
continue;
}
// Check if the value field is not repeated
if (fieldReader.getType().getMode() == TypeProtos.DataMode.REPEATED) {
throw new DrillRuntimeException("kvgen function does not support repeated type values");
}
// writing a new field, start a new map
mapWriter.start();