Skip to content

Commit a211951

Browse files
GH-2194 - Pass condition from pagerequest to the query.
This fixes #2194.
1 parent cd5ec34 commit a211951

File tree

3 files changed

+54
-18
lines changed

3 files changed

+54
-18
lines changed

src/main/java/org/springframework/data/neo4j/repository/query/CypherdslConditionExecutorImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public Page<T> findAll(Condition condition, Pageable pageable) {
113113

114114
List<T> page = this.neo4jOperations.toExecutableQuery(
115115
this.metaData.getType(),
116-
QueryFragmentsAndParameters.forCondition(this.metaData, Conditions.noCondition(), pageable, null)
116+
QueryFragmentsAndParameters.forCondition(this.metaData, condition, pageable, null)
117117
).getResults();
118118
LongSupplier totalCountSupplier = () -> this.count(condition);
119119
return PageableExecutionUtils.getPage(page, pageable, totalCountSupplier);

src/test/java/org/springframework/data/neo4j/integration/imperative/CypherdslConditionExecutorIT.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.beans.factory.annotation.Autowired;
2828
import org.springframework.context.annotation.Bean;
2929
import org.springframework.context.annotation.Configuration;
30+
import org.springframework.data.domain.Page;
3031
import org.springframework.data.domain.PageRequest;
3132
import org.springframework.data.domain.Sort;
3233
import org.springframework.data.neo4j.config.AbstractNeo4jConfig;
@@ -151,12 +152,31 @@ void orderedFindAllWithoutPredicateShouldWork(@Autowired PersonRepository reposi
151152
@Test
152153
void pagedFindAllShouldWork(@Autowired PersonRepository repository) {
153154

154-
assertThat(
155-
repository.findAll(firstName.eq(Cypher.literalOf("Helge")).or(lastName.eq(Cypher.literalOf("B."))),
155+
Page<Person> people = repository.findAll(firstName.eq(Cypher.literalOf("Helge")).or(lastName.eq(Cypher.literalOf("B."))),
156156
PageRequest.of(1, 1, Sort.by("lastName").descending())
157-
))
157+
);
158+
159+
assertThat(people.hasPrevious()).isTrue();
160+
assertThat(people.hasNext()).isFalse();
161+
assertThat(people.getTotalElements()).isEqualTo(2);
162+
assertThat(people)
163+
.extracting(Person::getFirstName)
164+
.containsExactly("Bela");
165+
}
166+
167+
@Test // GH-2194
168+
void pagedFindAllShouldWork2(@Autowired PersonRepository repository) {
169+
170+
Page<Person> people = repository.findAll(firstName.eq(Cypher.literalOf("Helge")).or(lastName.eq(Cypher.literalOf("B."))),
171+
PageRequest.of(0, 20, Sort.by("lastName").descending())
172+
);
173+
174+
assertThat(people.hasPrevious()).isFalse();
175+
assertThat(people.hasNext()).isFalse();
176+
assertThat(people.getTotalElements()).isEqualTo(2);
177+
assertThat(people)
158178
.extracting(Person::getFirstName)
159-
.containsExactly("B");
179+
.containsExactly("Helge", "Bela");
160180
}
161181

162182
@Test

src/test/java/org/springframework/data/neo4j/integration/imperative/QuerydslNeo4jPredicateExecutorIT.java

+29-13
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,16 @@
2424
import org.springframework.beans.factory.annotation.Autowired;
2525
import org.springframework.context.annotation.Bean;
2626
import org.springframework.context.annotation.Configuration;
27+
import org.springframework.data.domain.Page;
2728
import org.springframework.data.domain.PageRequest;
2829
import org.springframework.data.domain.Sort;
2930
import org.springframework.data.neo4j.config.AbstractNeo4jConfig;
3031
import org.springframework.data.neo4j.integration.shared.common.Person;
31-
// tag::sdn-mixins.dynamic-conditions.add-mixin[]
3232
import org.springframework.data.neo4j.repository.Neo4jRepository;
33-
// end::sdn-mixins.dynamic-conditions.add-mixin[]
3433
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
3534
import org.springframework.data.neo4j.test.Neo4jExtension;
3635
import org.springframework.data.neo4j.test.Neo4jIntegrationTest;
37-
// tag::sdn-mixins.dynamic-conditions.add-mixin[]
3836
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
39-
40-
// end::sdn-mixins.dynamic-conditions.add-mixin[]
4137
import org.springframework.transaction.annotation.EnableTransactionManagement;
4238

4339
import com.querydsl.core.types.Ops;
@@ -70,7 +66,8 @@ protected static void setupData() {
7066
transaction.run("MATCH (n) detach delete n");
7167
transaction.run("CREATE (p:Person{firstName: 'A', lastName: 'LA'})");
7268
transaction.run("CREATE (p:Person{firstName: 'B', lastName: 'LB'})");
73-
transaction.run("CREATE (p:Person{firstName: 'Helge', lastName: 'Schneider'}) -[:LIVES_AT]-> (a:Address {city: 'Mülheim an der Ruhr'})");
69+
transaction
70+
.run("CREATE (p:Person{firstName: 'Helge', lastName: 'Schneider'}) -[:LIVES_AT]-> (a:Address {city: 'Mülheim an der Ruhr'})");
7471
transaction.run("CREATE (p:Person{firstName: 'Bela', lastName: 'B.'})");
7572
transaction.commit();
7673
}
@@ -127,13 +124,33 @@ void orderedFindAllWithoutPredicateShouldWork(@Autowired QueryDSLPersonRepositor
127124
@Test
128125
void pagedFindAllShouldWork(@Autowired QueryDSLPersonRepository repository) {
129126

130-
assertThat(
131-
repository.findAll(Expressions.predicate(Ops.EQ, firstName, Expressions.asString("Helge"))
132-
.or(Expressions.predicate(Ops.EQ, lastName, Expressions.asString("B."))),
133-
PageRequest.of(1, 1, Sort.by("lastName").descending())
134-
))
127+
Page<Person> people = repository.findAll(Expressions.predicate(Ops.EQ, firstName, Expressions.asString("Helge"))
128+
.or(Expressions.predicate(Ops.EQ, lastName, Expressions.asString("B."))),
129+
PageRequest.of(1, 1, Sort.by("lastName").descending())
130+
);
131+
132+
assertThat(people.hasPrevious()).isTrue();
133+
assertThat(people.hasNext()).isFalse();
134+
assertThat(people.getTotalElements()).isEqualTo(2);
135+
assertThat(people)
135136
.extracting(Person::getFirstName)
136-
.containsExactly("B");
137+
.containsExactly("Bela");
138+
}
139+
140+
@Test // GH-2194
141+
void pagedFindAllShouldWork2(@Autowired QueryDSLPersonRepository repository) {
142+
143+
Page<Person> people = repository.findAll(Expressions.predicate(Ops.EQ, firstName, Expressions.asString("Helge"))
144+
.or(Expressions.predicate(Ops.EQ, lastName, Expressions.asString("B."))),
145+
PageRequest.of(0, 20, Sort.by("lastName").descending())
146+
);
147+
148+
assertThat(people.hasPrevious()).isFalse();
149+
assertThat(people.hasNext()).isFalse();
150+
assertThat(people.getTotalElements()).isEqualTo(2);
151+
assertThat(people)
152+
.extracting(Person::getFirstName)
153+
.containsExactly("Helge", "Bela");
137154
}
138155

139156
@Test
@@ -160,7 +177,6 @@ interface QueryDSLPersonRepository extends
160177
}
161178
// end::sdn-mixins.dynamic-conditions.add-mixin[]
162179

163-
164180
@Configuration
165181
@EnableTransactionManagement
166182
@EnableNeo4jRepositories(considerNestedRepositories = true)

0 commit comments

Comments
 (0)