use of com.torodb.core.d2r.DocPartResultRow in project torodb by torodb.
the class R2DTranslatorImpl method readResult.
private void readResult(MetaDocPart metaDocPart, TableRef tableRef, DocPartResult docPartResult, Map<Integer, Map<String, List<KvValue<?>>>> currentFieldDocPartRow, Map<Integer, Map<String, List<KvValue<?>>>> childFieldDocPartRow, ImmutableList.Builder<ToroDocument> readedDocuments) {
while (docPartResult.hasNext()) {
KvDocument.Builder documentBuilder = new KvDocument.Builder();
DocPartResultRow row = docPartResult.next();
Integer did = row.getDid();
Integer rid = row.getRid();
Integer pid = row.getPid();
Integer seq = row.getSeq();
Map<String, List<KvValue<?>>> childFieldDocPartCell = childFieldDocPartRow.get(rid);
//TODO: ensure MetaField order using ResultSet meta data
Iterator<? extends MetaScalar> metaScalarIterator = metaDocPart.streamScalars().iterator();
boolean wasScalar = false;
int fieldIndex = 0;
while (metaScalarIterator.hasNext() && !wasScalar) {
assert seq != null : "found scalar value outside of an array";
MetaScalar metaScalar = metaScalarIterator.next();
KvValue<?> value = row.getUserValue(fieldIndex, metaScalar.getType());
fieldIndex++;
if (value != null) {
if (metaScalar.getType() == FieldType.CHILD) {
value = getChildValue(value, getDocPartCellName(tableRef), childFieldDocPartCell);
}
addValueToDocPartRow(currentFieldDocPartRow, tableRef, pid, seq, value);
wasScalar = true;
}
}
if (wasScalar) {
continue;
}
Iterator<? extends MetaField> metaFieldIterator = metaDocPart.streamFields().iterator();
while (metaFieldIterator.hasNext()) {
MetaField metaField = metaFieldIterator.next();
KvValue<?> value = row.getUserValue(fieldIndex, metaField.getType());
fieldIndex++;
if (value != null) {
if (metaField.getType() == FieldType.CHILD) {
value = getChildValue(value, metaField.getName(), childFieldDocPartCell);
}
documentBuilder.putValue(metaField.getName(), value);
}
}
if (tableRef.isRoot()) {
readedDocuments.add(new ToroDocument(did, documentBuilder.build()));
} else {
addValueToDocPartRow(currentFieldDocPartRow, tableRef, pid, seq, documentBuilder.build());
}
}
}
Aggregations