Skip to content

Commit d8bba74

Browse files
author
Zhen Li
committed
Recreated the error
1 parent cb994df commit d8bba74

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

driver/src/test/java/org/neo4j/driver/integration/reactive/RxSessionIT.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import reactor.test.StepVerifier;
2727

2828
import java.util.Arrays;
29+
import java.util.Collections;
2930
import java.util.Iterator;
3031
import java.util.Set;
3132
import java.util.concurrent.atomic.AtomicInteger;
@@ -38,8 +39,8 @@
3839
import org.neo4j.driver.exceptions.SessionExpiredException;
3940
import org.neo4j.driver.exceptions.TransientException;
4041
import org.neo4j.driver.internal.util.EnabledOnNeo4jWith;
41-
import org.neo4j.driver.reactive.RxStatementResult;
4242
import org.neo4j.driver.reactive.RxSession;
43+
import org.neo4j.driver.reactive.RxStatementResult;
4344
import org.neo4j.driver.reactive.RxTransaction;
4445
import org.neo4j.driver.reactive.RxTransactionWork;
4546
import org.neo4j.driver.util.DatabaseExtension;
@@ -182,6 +183,43 @@ void shouldRunAsyncTransactionThatCanNotBeRetriedAfterATransientFailure()
182183
assertNoParallelScheduler();
183184
}
184185

186+
@Test
187+
void shouldHandleNestedQueries() {
188+
int size = 12555;
189+
190+
Flux<Integer> nodeIds = Flux.using( neo4j.driver()::rxSession,
191+
session -> Flux.from( session.run( "UNWIND range(1, $size) AS x RETURN x",
192+
Collections.singletonMap( "size", size ) ).records() )
193+
.limitRate( 20 )
194+
.flatMap( record -> {
195+
int x = record.get( "x" ).asInt();
196+
RxStatementResult innerResult = session.run( "CREATE (n:Node {id: $x}) RETURN n.id",
197+
Collections.singletonMap( "x", x ) );
198+
return innerResult.records();
199+
} ).map( r -> r.get( 0 ).asInt() ), RxSession::close );
200+
201+
StepVerifier.create( nodeIds ).expectNextCount( size ).verifyComplete();
202+
}
203+
204+
@Test
205+
void shouldGiveHelpfulErrorMessageWhenNestingTransactionFunctions() {
206+
207+
int size = 12555;
208+
Flux<Integer> nodeIds = Flux.using( neo4j.driver()::rxSession,
209+
session -> Flux.from( session.readTransaction( tx ->
210+
tx.run( "UNWIND range(1, $size) AS x RETURN x",
211+
Collections.singletonMap( "size", size ) ).records() ) )
212+
.limitRate( 20 )
213+
.flatMap( record -> {
214+
int x = record.get( "x" ).asInt();
215+
return session.writeTransaction( tx ->
216+
tx.run( "CREATE (n:Node {id: $x}) RETURN n.id",
217+
Collections.singletonMap( "x", x ) ).records() );
218+
} ).map( r -> r.get( 0 ).asInt() ), RxSession::close );
219+
220+
StepVerifier.create( nodeIds ).expectNextCount( size ).verifyComplete();
221+
}
222+
185223
private void assertNoParallelScheduler()
186224
{
187225
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

0 commit comments

Comments
 (0)