in neo4j/src/main/java/org/hibernate/ogm/datastore/neo4j/HttpNeo4jDialect.java [542:581]
public ClosableIterator<Tuple> executeBackendQuery(BackendQuery<String> backendQuery, QueryParameters queryParameters, TupleContext tupleContext) {
Map<String, Object> parameters = getParameters( queryParameters );
String nativeQuery = buildNativeQuery( backendQuery, queryParameters );
Statement statement = new Statement( nativeQuery, parameters );
Statements statements = new Statements();
statements.addStatement( statement );
Long txId = transactionId( tupleContext.getTransactionContext() );
StatementsResponse response = null;
if ( backendQuery.getSingleEntityMetadataInformationOrNull() != null ) {
response = client.executeQueriesInOpenTransaction( txId, statements );
validate( response, nativeQuery );
EntityKeyMetadata entityKeyMetadata = backendQuery.getSingleEntityMetadataInformationOrNull().getEntityKeyMetadata();
HttpNeo4jEntityQueries queries = getEntityQueries( entityKeyMetadata, tupleContext );
List<StatementResult> results = response.getResults();
List<Row> rows = results.get( 0 ).getData();
EntityKey[] keys = new EntityKey[ rows.size() ];
for ( int i = 0; i < rows.size(); i++ ) {
List<Node> nodes = rows.get( i ).getGraph().getNodes();
if ( nodes.isEmpty() ) {
// Projections and addEntities are not allowed in the same query at the same time
throw log.addEntityNotAllowedInNativeQueriesUsingProjection( entityKeyMetadata.getTable(), backendQuery.getQuery() );
}
Node node = nodes.get( 0 );
Object[] values = columnValues( node, entityKeyMetadata );
keys[i] = new EntityKey( entityKeyMetadata, values );
}
ClosableIterator<NodeWithEmbeddedNodes> entities = getEntityQueries( entityKeyMetadata, tupleContext ).findEntities( client, keys, txId );
return new HttpNeo4jNodesTupleIterator( client, txId, queries, entityKeyMetadata, tupleContext.getTupleTypeContext(), entities );
}
else {
statement.setResultDataContents( Arrays.asList( Statement.AS_ROW ) );
response = client.executeQueriesInOpenTransaction( txId, statements );
validate( response, nativeQuery );
return new HttpNeo4jMapsTupleIterator( response.getResults().get( 0 ) );
}
}