abstract ExecutingQueryList remove( ExecutingQuery parent, ExecutingQuery target );
final void stopQueryExecution( ExecutingQuery executingQuery ) { this.executingQueryList = executingQueryList.remove( executingQuery ); transaction.getStatistics().addWaitingTime( executingQuery.reportedWaitingTimeNanos() ); }
@Override ExecutingQueryList remove( ExecutingQuery parent, ExecutingQuery target ) { if ( target.equals( query ) ) { next.waitsFor( parent ); return next; } else { ExecutingQueryList removed = next.remove( parent, target ); if ( removed == next ) { return this; } else { return new Entry( query, removed ); } } }
@Test public void removingTheLastQueryReturnsAnEmptyList() { // Given ExecutingQuery aQuery = createExecutingQuery( 1, "query" ); ExecutingQueryList list = ExecutingQueryList.EMPTY.push( aQuery ); // When ExecutingQueryList result = list.remove( aQuery ); // Then assertThat( result, equalTo( ExecutingQueryList.EMPTY ) ); }
@Test public void shouldNotChangeAListWhenRemovingAQueryThatIsNotInTheList() { // given ExecutingQuery query1 = createExecutingQuery( 1, "query1" ); ExecutingQuery query2 = createExecutingQuery( 2, "query2" ); ExecutingQueryList list = ExecutingQueryList.EMPTY.push( query1 ); // when ExecutingQueryList result = list.remove( query2 ); // then assertThat( result, equalTo( list ) ); }
@Test public void removingQueryInTheMiddleKeepsOrder() { // Given ExecutingQuery query1 = createExecutingQuery( 1, "query1" ); ExecutingQuery query2 = createExecutingQuery( 2, "query2" ); ExecutingQuery query3 = createExecutingQuery( 3, "query3" ); ExecutingQuery query4 = createExecutingQuery( 4, "query4" ); ExecutingQuery query5 = createExecutingQuery( 5, "query5" ); ExecutingQueryList list = ExecutingQueryList.EMPTY .push( query1 ) .push( query2 ) .push( query3 ) .push( query4 ) .push( query5 ); // When List<ExecutingQuery> result = list.remove( query3 ).queries().collect( Collectors.toList() ); // Then assertThat( result, equalTo( asList( query5, query4, query2, query1 ) ) ); }
abstract ExecutingQueryList remove( ExecutingQuery parent, ExecutingQuery target );
final void stopQueryExecution( ExecutingQuery executingQuery ) { this.executingQueryList = executingQueryList.remove( executingQuery ); transaction.getStatistics().addWaitingTime( executingQuery.reportedWaitingTimeNanos() ); }
@Override ExecutingQueryList remove( ExecutingQuery parent, ExecutingQuery target ) { if ( target.equals( query ) ) { next.waitsFor( parent ); return next; } else { ExecutingQueryList removed = next.remove( parent, target ); if ( removed == next ) { return this; } else { return new Entry( query, removed ); } } }