Skip to content

Commit dd8d5e3

Browse files
mp911dechristophstrobl
authored andcommitted
Add support for count projections.
Original Pull Request: #654
1 parent 3895eec commit dd8d5e3

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/main/java/org/springframework/data/keyvalue/repository/query/KeyValuePartTreeQuery.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,11 @@ public KeyValuePartTreeQuery(QueryMethod queryMethod, ValueExpressionDelegate va
134134

135135
return new PageImpl(IterableConverter.toList(result), page, count);
136136
} else if (queryMethod.isCollectionQuery()) {
137-
138137
return this.keyValueOperations.find(query, queryMethod.getEntityInformation().getJavaType());
139138
} else if (partTree.get().isExistsProjection()) {
140139
return keyValueOperations.exists(query, queryMethod.getEntityInformation().getJavaType());
140+
} else if (partTree.get().isCountProjection()) {
141+
return keyValueOperations.count(query, queryMethod.getEntityInformation().getJavaType());
141142
} else {
142143

143144
Iterable<?> result = this.keyValueOperations.find(query, queryMethod.getEntityInformation().getJavaType());

src/test/java/org/springframework/data/keyvalue/repository/query/KeyValuePartTreeQueryUnitTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import org.springframework.data.util.TypeInformation;
4040

4141
/**
42+
* Unit tests for {@link KeyValuePartTreeQuery}.
43+
*
4244
* @author Christoph Strobl
4345
* @author Mark Paluch
4446
*/
@@ -175,12 +177,34 @@ void shouldUseCountForExists() throws NoSuchMethodException {
175177
verify(kvOpsMock).exists(eq(query), eq(Person.class));
176178
}
177179

180+
@Test // GH-71
181+
void shouldUseCountForCount() throws NoSuchMethodException {
182+
183+
when(metadataMock.getDomainType()).thenReturn((Class) Person.class);
184+
when(metadataMock.getDomainTypeInformation()).thenReturn((TypeInformation) TypeInformation.of(Person.class));
185+
when(metadataMock.getReturnType(any(Method.class))).thenReturn((TypeInformation) TypeInformation.of(Boolean.class));
186+
when(metadataMock.getReturnedDomainClass(any(Method.class))).thenReturn((Class) Boolean.class);
187+
188+
QueryMethod qm = new QueryMethod(Repo.class.getMethod("countByFirstname", String.class), metadataMock,
189+
projectionFactoryMock);
190+
191+
KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(qm, ValueExpressionDelegate.create(), kvOpsMock,
192+
SpelQueryCreator.class);
193+
194+
KeyValueQuery<?> query = partTreeQuery.prepareQuery(new Object[] { "firstname" });
195+
partTreeQuery.doExecute(new Object[] { "firstname" }, query);
196+
197+
verify(kvOpsMock).count(eq(query), eq(Person.class));
198+
}
199+
178200
interface Repo {
179201

180202
List<Person> findByFirstname(String firstname);
181203

182204
boolean existsByFirstname(String firstname);
183205

206+
int countByFirstname(String firstname);
207+
184208
List<Person> findBy(Pageable page);
185209

186210
List<Person> findTop3By();

0 commit comments

Comments
 (0)