DATAES-605 - Polishing.

This commit is contained in:
P.J.Meisch 2019-07-10 22:55:43 +02:00
parent 216fc89fd2
commit 45015cd7ee
2 changed files with 30 additions and 12 deletions

View File

@ -37,7 +37,9 @@ import org.springframework.util.ClassUtils;
* @author Rasmus Faber-Espensen * @author Rasmus Faber-Espensen
*/ */
public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery { public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery {
private static final int DEFAULT_STREAM_BATCH_SIZE = 500; private static final int DEFAULT_STREAM_BATCH_SIZE = 500;
private final PartTree tree; private final PartTree tree;
private final MappingContext<?, ElasticsearchPersistentProperty> mappingContext; private final MappingContext<?, ElasticsearchPersistentProperty> mappingContext;
@ -49,20 +51,26 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery
@Override @Override
public Object execute(Object[] parameters) { public Object execute(Object[] parameters) {
ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters); ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters);
CriteriaQuery query = createQuery(accessor); CriteriaQuery query = createQuery(accessor);
if (tree.isDelete()) { if (tree.isDelete()) {
Object result = countOrGetDocumentsForDelete(query, accessor); Object result = countOrGetDocumentsForDelete(query, accessor);
elasticsearchOperations.delete(query, queryMethod.getEntityInformation().getJavaType()); elasticsearchOperations.delete(query, queryMethod.getEntityInformation().getJavaType());
return result; return result;
} else if (queryMethod.isPageQuery()) { } else if (queryMethod.isPageQuery()) {
query.setPageable(accessor.getPageable()); query.setPageable(accessor.getPageable());
return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType());
} else if (queryMethod.isStreamQuery()) { } else if (queryMethod.isStreamQuery()) {
Class<?> entityType = queryMethod.getEntityInformation().getJavaType(); Class<?> entityType = queryMethod.getEntityInformation().getJavaType();
if (accessor.getPageable().isUnpaged()) { if (accessor.getPageable().isUnpaged()) {
query.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE)); query.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
} else { } else {
query.setPageable(accessor.getPageable()); query.setPageable(accessor.getPageable());
} }
@ -70,16 +78,22 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery
.createStreamFromIterator((CloseableIterator<Object>) elasticsearchOperations.stream(query, entityType)); .createStreamFromIterator((CloseableIterator<Object>) elasticsearchOperations.stream(query, entityType));
} else if (queryMethod.isCollectionQuery()) { } else if (queryMethod.isCollectionQuery()) {
if (accessor.getPageable().isUnpaged()) { if (accessor.getPageable().isUnpaged()) {
int itemCount = (int) elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType()); int itemCount = (int) elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType());
query.setPageable(PageRequest.of(0, Math.max(1, itemCount))); query.setPageable(PageRequest.of(0, Math.max(1, itemCount)));
} else { } else {
query.setPageable(accessor.getPageable()); query.setPageable(accessor.getPageable());
} }
return elasticsearchOperations.queryForList(query, queryMethod.getEntityInformation().getJavaType()); return elasticsearchOperations.queryForList(query, queryMethod.getEntityInformation().getJavaType());
} else if (tree.isCountProjection()) { } else if (tree.isCountProjection()) {
return elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType()); return elasticsearchOperations.count(query, queryMethod.getEntityInformation().getJavaType());
} }
return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType()); return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType());
} }

View File

@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.junit.Test; import org.junit.Test;
@ -59,6 +60,7 @@ import org.springframework.data.geo.Point;
* @author Christoph Strobl * @author Christoph Strobl
* @author Don Wellington * @author Don Wellington
* @author Peter-Josef Meisch * @author Peter-Josef Meisch
* @author Rasmus Faber-Espensen
*/ */
public abstract class CustomMethodRepositoryBaseTests { public abstract class CustomMethodRepositoryBaseTests {
@ -1239,6 +1241,7 @@ public abstract class CustomMethodRepositoryBaseTests {
@Test // DATAES-605 @Test // DATAES-605
public void streamMethodsShouldWorkWithLargeResultSets() { public void streamMethodsShouldWorkWithLargeResultSets() {
// given // given
List<SampleEntity> entities = createSampleEntities("abc", 10001); List<SampleEntity> entities = createSampleEntities("abc", 10001);
repository.saveAll(entities); repository.saveAll(entities);
@ -1253,6 +1256,7 @@ public abstract class CustomMethodRepositoryBaseTests {
@Test // DATAES-605 @Test // DATAES-605
public void streamMethodsCanHandlePageable() { public void streamMethodsCanHandlePageable() {
// given // given
List<SampleEntity> entities = createSampleEntities("abc", 10); List<SampleEntity> entities = createSampleEntities("abc", 10);
repository.saveAll(entities); repository.saveAll(entities);
@ -1271,7 +1275,7 @@ public abstract class CustomMethodRepositoryBaseTests {
for (int i = 0; i < numberOfEntities; i++) { for (int i = 0; i < numberOfEntities; i++) {
SampleEntity entity = new SampleEntity(); SampleEntity entity = new SampleEntity();
entity.setId(randomNumeric(32)); entity.setId(UUID.randomUUID().toString());
entity.setAvailable(true); entity.setAvailable(true);
entity.setMessage("Message"); entity.setMessage("Message");
entity.setType(type); entity.setType(type);