Skip to content

Commit 2fde402

Browse files
committed
GH-2169 - Remove blocking call from ReactiveNeo4jTemplate.
Closes GH-2169
1 parent e7929c2 commit 2fde402

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jTemplate.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -730,7 +730,7 @@ private Mono<DatabaseSelection> getDatabaseName() {
730730
@Override
731731
public <T> Mono<ExecutableQuery<T>> toExecutableQuery(PreparedQuery<T> preparedQuery) {
732732

733-
return getDatabaseName().map(databaseName -> {
733+
return getDatabaseName().flatMap(databaseName -> {
734734
Class<T> resultType = preparedQuery.getResultType();
735735
QueryFragmentsAndParameters queryFragmentsAndParameters = preparedQuery.getQueryFragmentsAndParameters();
736736
String cypherQuery = queryFragmentsAndParameters.getCypherQuery();
@@ -745,14 +745,19 @@ public <T> Mono<ExecutableQuery<T>> toExecutableQuery(PreparedQuery<T> preparedQ
745745
Map<String, Object> parameters = queryFragmentsAndParameters.getParameters();
746746

747747
if (containsPossibleCircles && !queryFragments.isScalarValueReturn()) {
748-
GenericQueryAndParameters genericQueryAndParameters =
749-
createQueryAndParameters(entityMetaData, queryFragments, parameters).block();
748+
return createQueryAndParameters(entityMetaData, queryFragments, parameters)
749+
.map(genericQueryAndParameters -> {
750+
ReactiveNeo4jClient.MappingSpec<T> mappingSpec = this.neo4jClient.query(renderer.render(GenericQueryAndParameters.STATEMENT))
751+
.in(databaseName.getValue()).bindAll(genericQueryAndParameters.getParameters()).fetchAs(resultType);
750752

751-
cypherQuery = renderer.render(GenericQueryAndParameters.STATEMENT);
752-
finalParameters = genericQueryAndParameters.getParameters();
753-
} else {
754-
cypherQuery = renderer.render(queryFragments.toStatement());
753+
ReactiveNeo4jClient.RecordFetchSpec<T> fetchSpec = preparedQuery.getOptionalMappingFunction()
754+
.map(mappingFunction -> mappingSpec.mappedBy(mappingFunction)).orElse(mappingSpec);
755+
756+
return new DefaultReactiveExecutableQuery<>(preparedQuery, fetchSpec);
757+
});
755758
}
759+
760+
cypherQuery = renderer.render(queryFragments.toStatement());
756761
}
757762

758763
ReactiveNeo4jClient.MappingSpec<T> mappingSpec = this.neo4jClient.query(cypherQuery)
@@ -761,7 +766,7 @@ public <T> Mono<ExecutableQuery<T>> toExecutableQuery(PreparedQuery<T> preparedQ
761766
ReactiveNeo4jClient.RecordFetchSpec<T> fetchSpec = preparedQuery.getOptionalMappingFunction()
762767
.map(mappingFunction -> mappingSpec.mappedBy(mappingFunction)).orElse(mappingSpec);
763768

764-
return new DefaultReactiveExecutableQuery<>(preparedQuery, fetchSpec);
769+
return Mono.just(new DefaultReactiveExecutableQuery<>(preparedQuery, fetchSpec));
765770
});
766771
}
767772

0 commit comments

Comments
 (0)