Skip to content

Commit f6e7792

Browse files
committed
Polishing.
Introduce Query.isLimited method to avoid magic numbers. See #1233 Original pull request: #1233.
1 parent 76ed7e2 commit f6e7792

File tree

3 files changed

+22
-17
lines changed

3 files changed

+22
-17
lines changed

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,7 @@ public R2dbcEntityTemplate(DatabaseClient databaseClient, R2dbcDialect dialect,
151151
* @param databaseClient must not be {@literal null}.
152152
* @since 1.2
153153
*/
154-
public R2dbcEntityTemplate(DatabaseClient databaseClient,
155-
ReactiveDataAccessStrategy strategy) {
154+
public R2dbcEntityTemplate(DatabaseClient databaseClient, ReactiveDataAccessStrategy strategy) {
156155

157156
Assert.notNull(databaseClient, "DatabaseClient must not be null");
158157
Assert.notNull(strategy, "ReactiveDataAccessStrategy must not be null");
@@ -421,13 +420,8 @@ private <T> RowsFetchSpec<T> doSelect(Query query, Class<?> entityClass, SqlIden
421420
*/
422421
@Override
423422
public <T> Mono<T> selectOne(Query query, Class<T> entityClass) throws DataAccessException {
424-
Query q = query;
425-
/* If the query has not a defined limit, a limit of 2 is employed
426-
to catch cases where the query would yield more than one result. */
427-
if (query.getLimit() == -1) {
428-
q = query.limit(2);
429-
} // else: use the already defined limit.
430-
return doSelect(q, entityClass, getTableName(entityClass), entityClass, RowsFetchSpec::one);
423+
return doSelect(query.isLimited() ? query : query.limit(2), entityClass, getTableName(entityClass), entityClass,
424+
RowsFetchSpec::one);
431425
}
432426

433427
/*

spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplateUnitTests.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ void shouldCountBy() {
9090

9191
MockRowMetadata metadata = MockRowMetadata.builder()
9292
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
93-
MockResult result = MockResult.builder()
94-
.row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
93+
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
9594

9695
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
9796

@@ -111,8 +110,7 @@ void shouldProjectExistsResult() {
111110

112111
MockRowMetadata metadata = MockRowMetadata.builder()
113112
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
114-
MockResult result = MockResult.builder()
115-
.row(MockRow.builder().identified(0, Object.class, null).build()).build();
113+
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Object.class, null).build()).build();
116114

117115
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
118116

@@ -129,8 +127,7 @@ void shouldExistsByCriteria() {
129127

130128
MockRowMetadata metadata = MockRowMetadata.builder()
131129
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
132-
MockResult result = MockResult.builder()
133-
.row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
130+
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
134131

135132
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
136133

@@ -208,7 +205,8 @@ void shouldSelectOneDoNotOverrideExistingLimit() {
208205

209206
recorder.addStubbing(s -> s.startsWith("SELECT"), Collections.emptyList());
210207

211-
entityTemplate.selectOne(Query.query(Criteria.where("name").is("Walter")).sort(Sort.by("name")).limit(1), Person.class) //
208+
entityTemplate
209+
.selectOne(Query.query(Criteria.where("name").is("Walter")).sort(Sort.by("name")).limit(1), Person.class) //
212210
.as(StepVerifier::create) //
213211
.verifyComplete();
214212

spring-data-relational/src/main/java/org/springframework/data/relational/core/query/Query.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
*/
4242
public class Query {
4343

44+
private static final int NO_LIMIT = -1;
45+
4446
private final @Nullable CriteriaDefinition criteria;
4547

4648
private final List<SqlIdentifier> columns;
@@ -64,7 +66,7 @@ public static Query query(CriteriaDefinition criteria) {
6466
* @param criteria must not be {@literal null}.
6567
*/
6668
private Query(@Nullable CriteriaDefinition criteria) {
67-
this(criteria, Collections.emptyList(), Sort.unsorted(), -1, -1);
69+
this(criteria, Collections.emptyList(), Sort.unsorted(), NO_LIMIT, NO_LIMIT);
6870
}
6971

7072
private Query(@Nullable CriteriaDefinition criteria, List<SqlIdentifier> columns, Sort sort, int limit, long offset) {
@@ -248,6 +250,17 @@ public int getLimit() {
248250
return this.limit;
249251
}
250252

253+
/**
254+
* Return whether the query has a limit.
255+
*
256+
* @return {@code true} if a limit is set.
257+
* @see #getLimit()
258+
* @since 3.0
259+
*/
260+
public boolean isLimited() {
261+
return getLimit() != NO_LIMIT;
262+
}
263+
251264
private static void assertNoCaseSort(Sort sort) {
252265

253266
for (Sort.Order order : sort) {

0 commit comments

Comments
 (0)