private Map<RowKey, Tuple> createAssociationMap( AssociationKey associationKey, AssociationContext associationContext, EntityKey entityKey) { String relationshipType = associationContext.getAssociationTypeContext().getRoleOnMainSide(); ResourceIterator<Relationship> relationships = entityQueries .get(entityKey.getMetadata()) .findAssociation(dataBase, entityKey.getColumnValues(), relationshipType); Map<RowKey, Tuple> tuples = new HashMap<RowKey, Tuple>(); try { while (relationships.hasNext()) { Relationship relationship = relationships.next(); AssociatedEntityKeyMetadata associatedEntityKeyMetadata = associationContext.getAssociationTypeContext().getAssociatedEntityKeyMetadata(); EmbeddedNeo4jTupleAssociationSnapshot snapshot = new EmbeddedNeo4jTupleAssociationSnapshot( relationship, associationKey, associatedEntityKeyMetadata); RowKey rowKey = convert(associationKey, snapshot); tuples.put(rowKey, new Tuple(snapshot, SnapshotType.UPDATE)); } return tuples; } finally { relationships.close(); } }
@Test public void shouldCloseTransactionsWhenIteratingOverSingleColumn() throws Exception { // Given an execution result that has been started but not exhausted createNode(); createNode(); ExecutionResult executionResult = engine.execute("MATCH (n) RETURN n"); ResourceIterator<Node> resultIterator = executionResult.columnAs("n"); resultIterator.next(); assertThat(activeTransaction(), is(notNullValue())); // When resultIterator.close(); // Then assertThat(activeTransaction(), is(nullValue())); }
@Override public List<Tuple> getTuples(EntityKey[] keys, TupleContext tupleContext) { if (keys.length == 0) { return Collections.emptyList(); } // We only supports one metadata for now EntityKeyMetadata metadata = keys[0].getMetadata(); // The result returned by the query might not be in the same order as the keys. ResourceIterator<Node> nodes = entityQueries.get(metadata).findEntities(dataBase, keys); try { return tuplesResult(keys, tupleContext, nodes); } finally { nodes.close(); } }
@Override public void forEachTuple(ModelConsumer consumer, EntityKeyMetadata... entityKeyMetadatas) { for (EntityKeyMetadata entityKeyMetadata : entityKeyMetadatas) { ResourceIterator<Node> queryNodes = entityQueries.get(entityKeyMetadata).findEntities(dataBase); try { while (queryNodes.hasNext()) { Node next = queryNodes.next(); Tuple tuple = new Tuple(new Neo4jTupleSnapshot(next, entityKeyMetadata)); consumer.consume(tuple); } } finally { queryNodes.close(); } } }
@Override public void forEachTuple( ModelConsumer consumer, TupleTypeContext tupleTypeContext, EntityKeyMetadata entityKeyMetadata) { ResourceIterator<Node> queryNodes = entityQueries.get(entityKeyMetadata).findEntities(dataBase); try { while (queryNodes.hasNext()) { Node next = queryNodes.next(); Tuple tuple = new Tuple( EmbeddedNeo4jTupleSnapshot.fromNode( next, tupleTypeContext.getAllAssociatedEntityKeyMetadata(), tupleTypeContext.getAllRoles(), entityKeyMetadata), SnapshotType.UPDATE); consumer.consume(tuple); } } finally { queryNodes.close(); } }