Skip to content

Commit 61083bf

Browse files
committed
spring-projects#282 - Add support of 'AFTER/BEFORE' conditions
1 parent 0944f8a commit 61083bf

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

Diff for: src/main/java/org/springframework/data/r2dbc/repository/query/ConditionFactory.java

+2
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public Condition createCondition(Part part) {
6666
return Conditions.isGreaterOrEqualTo(pathExpression, firstBindMarker)
6767
.and(Conditions.isLessOrEqualTo(pathExpression, secondBindMarker));
6868
}
69+
case AFTER:
6970
case GREATER_THAN: {
7071
Expression pathExpression = createPropertyPathExpression(part.getProperty());
7172
BindMarker bindMarker = createBindMarker(parameterMetadataProvider.next(part));
@@ -76,6 +77,7 @@ public Condition createCondition(Part part) {
7677
BindMarker bindMarker = createBindMarker(parameterMetadataProvider.next(part));
7778
return Conditions.isGreaterOrEqualTo(pathExpression, bindMarker);
7879
}
80+
case BEFORE:
7981
case LESS_THAN: {
8082
Expression pathExpression = createPropertyPathExpression(part.getProperty());
8183
BindMarker bindMarker = createBindMarker(parameterMetadataProvider.next(part));

Diff for: src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryIntegrationTests.java

+26
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,28 @@ public void createsQueryToFindAllEntitiesByIntegerAttributeGreaterThanEqual() th
193193
assertThat(bindableQuery.get()).isEqualTo(expectedSql);
194194
}
195195

196+
@Test
197+
public void createsQueryToFindAllEntitiesByDateAttributeAfter() throws Exception {
198+
R2dbcQueryMethod queryMethod = getQueryMethod("findAllByDateOfBirthAfter", Date.class);
199+
PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, databaseClient, r2dbcConverter,
200+
dataAccessStrategy);
201+
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[]{new Date()});
202+
BindableQuery bindableQuery = r2dbcQuery.createQuery(accessor);
203+
String expectedSql = "SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth > ?";
204+
assertThat(bindableQuery.get()).isEqualTo(expectedSql);
205+
}
206+
207+
@Test
208+
public void createsQueryToFindAllEntitiesByDateAttributeBefore() throws Exception {
209+
R2dbcQueryMethod queryMethod = getQueryMethod("findAllByDateOfBirthBefore", Date.class);
210+
PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, databaseClient, r2dbcConverter,
211+
dataAccessStrategy);
212+
RelationalParametersParameterAccessor accessor = getAccessor(queryMethod, new Object[]{new Date()});
213+
BindableQuery bindableQuery = r2dbcQuery.createQuery(accessor);
214+
String expectedSql = "SELECT " + ALL_FIELDS + " FROM " + TABLE + " WHERE " + TABLE + ".date_of_birth < ?";
215+
assertThat(bindableQuery.get()).isEqualTo(expectedSql);
216+
}
217+
196218
private R2dbcQueryMethod getQueryMethod(String methodName, Class<?>... parameterTypes) throws Exception {
197219
Method method = UserRepository.class.getMethod(methodName, parameterTypes);
198220
return new R2dbcQueryMethod(method, new DefaultRepositoryMetadata(UserRepository.class),
@@ -221,6 +243,10 @@ private interface UserRepository extends Repository<User, Long> {
221243
Flux<User> findAllByAgeGreaterThan(Integer age);
222244

223245
Flux<User> findAllByAgeGreaterThanEqual(Integer age);
246+
247+
Flux<User> findAllByDateOfBirthAfter(Date date);
248+
249+
Flux<User> findAllByDateOfBirthBefore(Date date);
224250
}
225251

226252
@Table("users")

0 commit comments

Comments
 (0)