Skip to content

Commit b222607

Browse files
committed
spring-projects#282 - Implement disjunction of conditions
1 parent d552ec1 commit b222607

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ protected Condition create(Part part, Iterator<Object> iterator) {
7979
}
8080

8181
@Override
82-
protected Condition and(Part part, Condition condition, Iterator<Object> iterator) {
83-
return condition.and(conditionFactory.createCondition(part));
82+
protected Condition and(Part part, Condition base, Iterator<Object> iterator) {
83+
return base.and(conditionFactory.createCondition(part));
8484
}
8585

8686
@Override
87-
protected Condition or(Condition condition, Condition s1) {
88-
throw new UnsupportedOperationException();
87+
protected Condition or(Condition base, Condition condition) {
88+
return base.or(condition);
8989
}
9090

9191
/**

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

+13
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,17 @@ public void createsQueryToFindAllEntitiesByTwoStringAttributes() throws Exceptio
121121
assertThat(bindableQuery.get()).isEqualTo(expectedSql);
122122
}
123123

124+
@Test
125+
public void createsQueryToFindAllEntitiesByOneOfTwoStringAttributes() throws Exception {
126+
R2dbcQueryMethod queryMethod = getQueryMethod("findByLastNameOrFirstName", String.class, String.class);
127+
PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, databaseClient, r2dbcConverter,
128+
dataAccessStrategy);
129+
BindableQuery bindableQuery = r2dbcQuery.createQuery(getAccessor(queryMethod, new Object[]{"Doe", "John"}));
130+
String expectedSql = "SELECT " + ALL_FIELDS + " FROM " + TABLE
131+
+ " WHERE " + TABLE + ".last_name = ? OR " + TABLE + ".first_name = ?";
132+
assertThat(bindableQuery.get()).isEqualTo(expectedSql);
133+
}
134+
124135
private R2dbcQueryMethod getQueryMethod(String methodName, Class<?>... parameterTypes) throws Exception {
125136
Method method = UserRepository.class.getMethod(methodName, parameterTypes);
126137
return new R2dbcQueryMethod(method, new DefaultRepositoryMetadata(UserRepository.class),
@@ -136,6 +147,8 @@ private interface UserRepository extends Repository<User, Long> {
136147

137148
Flux<User> findByLastNameAndFirstName(String lastName, String firstName);
138149

150+
Flux<User> findByLastNameOrFirstName(String lastName, String firstName);
151+
139152
Mono<Boolean> existsByFirstName(String firstName);
140153
}
141154

0 commit comments

Comments
 (0)