@@ -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