Skip to content

Commit 2dd0a67

Browse files
committed
Fix @query method implementation for unpaged queries.
Original Pull Request #1919 Closes #1917 (cherry picked from commit e717586)
1 parent 79e0260 commit 2dd0a67

File tree

3 files changed

+63
-24
lines changed

3 files changed

+63
-24
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.springframework.core.convert.support.GenericConversionService;
1919
import org.springframework.data.domain.PageRequest;
20+
import org.springframework.data.domain.Pageable;
2021
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
2122
import org.springframework.data.elasticsearch.core.SearchHitSupport;
2223
import org.springframework.data.elasticsearch.core.SearchHits;
@@ -84,16 +85,11 @@ public Object execute(Object[] parameters) {
8485
.unwrapSearchHits(SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable()));
8586
}
8687
} else if (queryMethod.isStreamQuery()) {
87-
if (accessor.getPageable().isUnpaged()) {
88-
stringQuery.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
89-
} else {
90-
stringQuery.setPageable(accessor.getPageable());
91-
}
88+
stringQuery.setPageable(
89+
accessor.getPageable().isPaged() ? accessor.getPageable() : PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
9290
result = StreamUtils.createStreamFromIterator(elasticsearchOperations.searchForStream(stringQuery, clazz, index));
9391
} else if (queryMethod.isCollectionQuery()) {
94-
if (accessor.getPageable().isPaged()) {
95-
stringQuery.setPageable(accessor.getPageable());
96-
}
92+
stringQuery.setPageable(accessor.getPageable().isPaged() ? accessor.getPageable() : Pageable.unpaged());
9793
result = elasticsearchOperations.search(stringQuery, clazz, index);
9894
} else {
9995
result = elasticsearchOperations.searchOne(stringQuery, clazz, index);

Diff for: src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java

+28-11
Original file line numberDiff line numberDiff line change
@@ -1610,19 +1610,18 @@ void shouldReturnSearchPageWithQuery() {
16101610
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
16111611
}
16121612

1613-
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
1613+
@Test // #1917
1614+
@DisplayName("shouldReturnAllDocumentsWithUnpagedQuery")
1615+
void shouldReturnAllDocumentsWithUnpagedQuery() {
16141616

1615-
List<SampleEntity> entities = new ArrayList<>();
1616-
for (int i = 0; i < numberOfEntities; i++) {
1617-
SampleEntity entity = new SampleEntity();
1618-
entity.setId(UUID.randomUUID().toString());
1619-
entity.setAvailable(true);
1620-
entity.setMessage("Message");
1621-
entity.setType(type);
1622-
entities.add(entity);
1623-
}
1617+
List<SampleEntity> entities = createSampleEntities("abc", 20);
1618+
repository.saveAll(entities);
16241619

1625-
return entities;
1620+
SearchHits<SampleEntity> searchHits = repository.searchWithQueryByMessageUnpaged("Message");
1621+
1622+
assertThat(searchHits).isNotNull();
1623+
assertThat((searchHits.getTotalHits())).isEqualTo(20);
1624+
assertThat(searchHits.getSearchHits()).hasSize(20);
16261625
}
16271626

16281627
@Test // DATAES-891
@@ -1647,6 +1646,21 @@ void shouldStreamSearchHitsWithQueryAnnotatedMethod() {
16471646
assertThat(count).isEqualTo(20);
16481647
}
16491648

1649+
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
1650+
1651+
List<SampleEntity> entities = new ArrayList<>();
1652+
for (int i = 0; i < numberOfEntities; i++) {
1653+
SampleEntity entity = new SampleEntity();
1654+
entity.setId(UUID.randomUUID().toString());
1655+
entity.setAvailable(true);
1656+
entity.setMessage("Message");
1657+
entity.setType(type);
1658+
entities.add(entity);
1659+
}
1660+
1661+
return entities;
1662+
}
1663+
16501664
@Document(indexName = "test-index-sample-repositories-custom-method")
16511665
static class SampleEntity {
16521666
@Nullable @Id private String id;
@@ -1854,6 +1868,9 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
18541868
@Query("{\"match\": {\"message\": \"?0\"}}")
18551869
SearchPage<SampleEntity> searchWithQueryByMessage(String message, Pageable pageable);
18561870

1871+
@Query("{\"match\": {\"message\": \"?0\"}}")
1872+
SearchHits<SampleEntity> searchWithQueryByMessageUnpaged(String message);
1873+
18571874
@CountQuery("{\"bool\" : {\"must\" : {\"term\" : {\"type\" : \"?0\"}}}}")
18581875
long countWithQueryByType(String type);
18591876
}

Diff for: src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryTests.java

+31-5
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.Arrays;
2929
import java.util.Collections;
3030
import java.util.List;
31+
import java.util.stream.Collectors;
3132
import java.util.stream.IntStream;
3233

3334
import org.elasticsearch.ElasticsearchStatusException;
@@ -541,14 +542,36 @@ void derivedFinderMethodReturningMonoShouldBeExecutedCorrectly() {
541542
@Test // DATAES-519
542543
void annotatedFinderMethodShouldBeExecutedCorrectly() {
543544

544-
bulkIndex(new SampleEntity("id-one", "message"), //
545-
new SampleEntity("id-two", "test message"), //
546-
new SampleEntity("id-three", "test test")) //
547-
.block();
545+
int count = 30;
546+
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
547+
.mapToObj(i -> new SampleEntity("id-" + i, "test " + i)).collect(Collectors.toList())
548+
.toArray(new SampleEntity[count]);
549+
550+
bulkIndex(sampleEntities).block();
548551

549552
repository.findAllViaAnnotatedQueryByMessageLike("test") //
550553
.as(StepVerifier::create) //
551-
.expectNextCount(2) //
554+
.expectNextCount(count) //
555+
.verifyComplete();
556+
}
557+
558+
@Test // #1917
559+
void annotatedFinderMethodPagedShouldBeExecutedCorrectly() {
560+
561+
int count = 30;
562+
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
563+
.mapToObj(i -> new SampleEntity("id-" + i, "test " + i)).collect(Collectors.toList())
564+
.toArray(new SampleEntity[count]);
565+
566+
bulkIndex(sampleEntities).block();
567+
568+
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(0, 20)) //
569+
.as(StepVerifier::create) //
570+
.expectNextCount(20) //
571+
.verifyComplete();
572+
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(1, 20)) //
573+
.as(StepVerifier::create) //
574+
.expectNextCount(10) //
552575
.verifyComplete();
553576
}
554577

@@ -596,6 +619,9 @@ interface ReactiveSampleEntityRepository extends ReactiveCrudRepository<SampleEn
596619
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
597620
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLike(String message);
598621

622+
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
623+
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLikePaged(String message, Pageable pageable);
624+
599625
Mono<SampleEntity> findFirstByMessageLike(String message);
600626

601627
Mono<Long> countAllByMessage(String message);

0 commit comments

Comments
 (0)