Polishing.
Introduce Query.isLimited method to avoid magic numbers. See #1233 Original pull request: #1233.
This commit is contained in:
@@ -151,8 +151,7 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw
|
||||
* @param databaseClient must not be {@literal null}.
|
||||
* @since 1.2
|
||||
*/
|
||||
public R2dbcEntityTemplate(DatabaseClient databaseClient,
|
||||
ReactiveDataAccessStrategy strategy) {
|
||||
public R2dbcEntityTemplate(DatabaseClient databaseClient, ReactiveDataAccessStrategy strategy) {
|
||||
|
||||
Assert.notNull(databaseClient, "DatabaseClient must not be null");
|
||||
Assert.notNull(strategy, "ReactiveDataAccessStrategy must not be null");
|
||||
@@ -421,13 +420,8 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw
|
||||
*/
|
||||
@Override
|
||||
public <T> Mono<T> selectOne(Query query, Class<T> entityClass) throws DataAccessException {
|
||||
Query q = query;
|
||||
/* If the query has not a defined limit, a limit of 2 is employed
|
||||
to catch cases where the query would yield more than one result. */
|
||||
if (query.getLimit() == -1) {
|
||||
q = query.limit(2);
|
||||
} // else: use the already defined limit.
|
||||
return doSelect(q, entityClass, getTableName(entityClass), entityClass, RowsFetchSpec::one);
|
||||
return doSelect(query.isLimited() ? query : query.limit(2), entityClass, getTableName(entityClass), entityClass,
|
||||
RowsFetchSpec::one);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -90,8 +90,7 @@ public class R2dbcEntityTemplateUnitTests {
|
||||
|
||||
MockRowMetadata metadata = MockRowMetadata.builder()
|
||||
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
|
||||
MockResult result = MockResult.builder()
|
||||
.row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
|
||||
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
|
||||
|
||||
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
|
||||
|
||||
@@ -111,8 +110,7 @@ public class R2dbcEntityTemplateUnitTests {
|
||||
|
||||
MockRowMetadata metadata = MockRowMetadata.builder()
|
||||
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
|
||||
MockResult result = MockResult.builder()
|
||||
.row(MockRow.builder().identified(0, Object.class, null).build()).build();
|
||||
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Object.class, null).build()).build();
|
||||
|
||||
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
|
||||
|
||||
@@ -129,8 +127,7 @@ public class R2dbcEntityTemplateUnitTests {
|
||||
|
||||
MockRowMetadata metadata = MockRowMetadata.builder()
|
||||
.columnMetadata(MockColumnMetadata.builder().name("name").type(R2dbcType.VARCHAR).build()).build();
|
||||
MockResult result = MockResult.builder()
|
||||
.row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
|
||||
MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Long.class, 1L).build()).build();
|
||||
|
||||
recorder.addStubbing(s -> s.startsWith("SELECT"), result);
|
||||
|
||||
@@ -208,7 +205,8 @@ public class R2dbcEntityTemplateUnitTests {
|
||||
|
||||
recorder.addStubbing(s -> s.startsWith("SELECT"), Collections.emptyList());
|
||||
|
||||
entityTemplate.selectOne(Query.query(Criteria.where("name").is("Walter")).sort(Sort.by("name")).limit(1), Person.class) //
|
||||
entityTemplate
|
||||
.selectOne(Query.query(Criteria.where("name").is("Walter")).sort(Sort.by("name")).limit(1), Person.class) //
|
||||
.as(StepVerifier::create) //
|
||||
.verifyComplete();
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@ import org.springframework.util.Assert;
|
||||
*/
|
||||
public class Query {
|
||||
|
||||
private static final int NO_LIMIT = -1;
|
||||
|
||||
private final @Nullable CriteriaDefinition criteria;
|
||||
|
||||
private final List<SqlIdentifier> columns;
|
||||
@@ -64,7 +66,7 @@ public class Query {
|
||||
* @param criteria must not be {@literal null}.
|
||||
*/
|
||||
private Query(@Nullable CriteriaDefinition criteria) {
|
||||
this(criteria, Collections.emptyList(), Sort.unsorted(), -1, -1);
|
||||
this(criteria, Collections.emptyList(), Sort.unsorted(), NO_LIMIT, NO_LIMIT);
|
||||
}
|
||||
|
||||
private Query(@Nullable CriteriaDefinition criteria, List<SqlIdentifier> columns, Sort sort, int limit, long offset) {
|
||||
@@ -248,6 +250,17 @@ public class Query {
|
||||
return this.limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether the query has a limit.
|
||||
*
|
||||
* @return {@code true} if a limit is set.
|
||||
* @see #getLimit()
|
||||
* @since 3.0
|
||||
*/
|
||||
public boolean isLimited() {
|
||||
return getLimit() != NO_LIMIT;
|
||||
}
|
||||
|
||||
private static void assertNoCaseSort(Sort sort) {
|
||||
|
||||
for (Sort.Order order : sort) {
|
||||
|
||||
Reference in New Issue
Block a user