@Override public ExecutionPlanDescription getExecutionPlanDescription() { return originalResult.getExecutionPlanDescription(); }
@Override public ExecutionPlanDescription executionPlanDescription() { return originalResult.getExecutionPlanDescription(); }
private Function<Object, ExecutionPlanDescription> planProvider( final Result result ) { return from -> result.getExecutionPlanDescription(); }
private void assertNoIndexSeeks( Result result ) { assertThat( result.stream().count(), is( 1L ) ); String planDescription = result.getExecutionPlanDescription().toString(); assertThat( planDescription, containsString( "NodeByLabel" ) ); assertThat( planDescription, not( containsString( "IndexSeek" ) ) ); }
@SafeVarargs private static Result mockExecutionResult( ExecutionPlanDescription planDescription, Iterable<Notification> notifications, Map<String, Object>... rows ) { Set<String> keys = new TreeSet<>(); for ( Map<String, Object> row : rows ) { keys.addAll( row.keySet() ); } Result executionResult = mock( Result.class ); when( executionResult.columns() ).thenReturn( new ArrayList<>( keys ) ); final Iterator<Map<String, Object>> inner = asList( rows ).iterator(); when( executionResult.hasNext() ).thenAnswer( invocation -> inner.hasNext() ); when( executionResult.next() ).thenAnswer( invocation -> inner.next() ); when( executionResult.getQueryExecutionType() ) .thenReturn( null != planDescription ? QueryExecutionType.profiled( QueryExecutionType.QueryType.READ_WRITE ) : QueryExecutionType.query( QueryExecutionType.QueryType.READ_WRITE ) ); if ( executionResult.getQueryExecutionType().requestedExecutionPlanDescription() ) { when( executionResult.getExecutionPlanDescription() ).thenReturn( planDescription ); } mockAccept( executionResult ); when( executionResult.getNotifications() ).thenReturn( notifications ); return executionResult; }
when( result.hasNext() ).thenReturn( false ); when( result.columns() ).thenReturn( new ArrayList<>() ); when( result.getExecutionPlanDescription() ).thenReturn( plan );
void shouldNotNotifyInStream( String version, String query ) { // when Result result = db().execute( version + query ); // then assertThat( Iterables.asList( result.getNotifications() ), empty() ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( version ) ); result.close(); }
@Test public void shouldNotifyWhenUsingCypher3_1ForTheRulePlannerWhenCypherVersionIsTheDefault() { // when Result result = db().execute( "CYPHER planner=rule RETURN 1" ); InputPosition position = InputPosition.empty; // then assertThat( result.getNotifications(), containsItem( rulePlannerUnavailable ) ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( "CYPHER 3.1" ) ); assertThat( arguments.get( "planner" ), equalTo( "RULE" ) ); result.close(); }
void shouldNotifyInStream( String version, String query, InputPosition pos, NotificationCode code ) { //when Result result = db().execute( version + query ); //then NotificationCode.Notification notification = code.notification( pos ); assertThat( Iterables.asList( result.getNotifications() ), Matchers.hasItems( notification ) ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( version ) ); result.close(); }
void shouldNotifyInStreamWithDetail( String version, String query, InputPosition pos, NotificationCode code, NotificationDetail detail ) { //when Result result = db().execute( version + query ); //then NotificationCode.Notification notification = code.notification( pos, detail ); assertThat( Iterables.asList( result.getNotifications() ), Matchers.hasItems( notification ) ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( version ) ); result.close(); }
@Test public void shouldNotifyWhenUsingCreateUniqueWhenCypherVersionIs3_5() { // when Result result = db().execute( "EXPLAIN CYPHER 3.5 MATCH (b) WITH b LIMIT 1 CREATE UNIQUE (b)-[:REL]->()" ); InputPosition position = new InputPosition( 44, 1, 45 ); // then assertThat( result.getNotifications(), containsNotification( CREATE_UNIQUE_UNAVAILABLE_FALLBACK.notification( position ) ) ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( "CYPHER 3.1" ) ); result.close(); }
@Test public void shouldNotifyWhenUsingCreateUniqueWhenCypherVersionIsDefault() { // when Result result = db().execute( "EXPLAIN MATCH (b) WITH b LIMIT 1 CREATE UNIQUE (b)-[:REL]->()" ); InputPosition position = new InputPosition( 33, 1, 34 ); // then assertThat( result.getNotifications(), containsNotification( CREATE_UNIQUE_UNAVAILABLE_FALLBACK.notification( position ) ) ); Map<String,Object> arguments = result.getExecutionPlanDescription().getArguments(); assertThat( arguments.get( "version" ), equalTo( "CYPHER 3.1" ) ); result.close(); }
@Test public void eagerResultHaveExecutionPlan() { Result result = database.execute( "profile MATCH (n) RETURN n.c" ); assertEquals( 1, testCursorContext.getAdditionalAttempts() ); assertEquals( 2, result.getExecutionPlanDescription().getProfilerStatistics().getRows() ); }
writeRootPlanDescription( result.getExecutionPlanDescription() );
@Override public ExecutionPlanDescription executionPlanDescription() { return originalResult.getExecutionPlanDescription(); }
@Override public ExecutionPlanDescription getExecutionPlanDescription() { return originalResult.getExecutionPlanDescription(); }
private Function<Object, ExecutionPlanDescription> planProvider( final Result result ) { return from -> result.getExecutionPlanDescription(); }
@Test public void testRunFirstColumnBugCompiled() throws Exception { ResourceIterator<Node> it = db.execute("CREATE (m:Movie {title:'MovieA'})<-[:ACTED_IN]-(p:Person {name:'PersonA'})-[:ACTED_IN]->(m2:Movie {title:'MovieB'}) RETURN m").columnAs("m"); Node movie = it.next(); it.close(); String query = "WITH {m} AS m MATCH (m)<-[:ACTED_IN]-(:Person)-[:ACTED_IN]->(rec:Movie) RETURN rec LIMIT 10"; System.out.println(db.execute("EXPLAIN "+query).getExecutionPlanDescription().toString()); ResourceIterator<Node> rec = db.execute(query, map("m",movie)).columnAs("rec"); assertEquals(1, rec.stream().count()); } @Test
private void printResult( Output out, Result result, long startTime ) throws RemoteException { result.writeAsStringTo( new PrintWriter( new OutputAsWriter( out ) ) ); out.println( (now() - startTime) + " ms" ); if ( result.getQueryExecutionType().requestedExecutionPlanDescription() ) { out.println(); out.println( result.getExecutionPlanDescription().toString() ); } }
@Test public void explain_returns_plan() throws Exception { // START SNIPPET: explain_returns_plan Result result = db.execute( "EXPLAIN CREATE (user:User{name:{name}}) RETURN user" ); assert result.getQueryExecutionType().isExplained(); assert result.getQueryExecutionType().requestedExecutionPlanDescription(); assert !result.hasNext(); assert !result.getQueryStatistics().containsUpdates(); assert result.columns().isEmpty(); assert !result.getExecutionPlanDescription().hasProfilerStatistics(); // END SNIPPET: explain_returns_plan }