Search in sources :

Example 1 with DocPartResultRow

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());
        }
    }
}
Also used : KvDocument(com.torodb.kvdocument.values.KvDocument) MetaField(com.torodb.core.transaction.metainf.MetaField) MetaScalar(com.torodb.core.transaction.metainf.MetaScalar) DocPartResultRow(com.torodb.core.d2r.DocPartResultRow) ToroDocument(com.torodb.core.document.ToroDocument) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)1 DocPartResultRow (com.torodb.core.d2r.DocPartResultRow)1 ToroDocument (com.torodb.core.document.ToroDocument)1 MetaField (com.torodb.core.transaction.metainf.MetaField)1 MetaScalar (com.torodb.core.transaction.metainf.MetaScalar)1 KvDocument (com.torodb.kvdocument.values.KvDocument)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1