diff --git a/src/main/java/org/springframework/data/r2dbc/core/StatementMapper.java b/src/main/java/org/springframework/data/r2dbc/core/StatementMapper.java index 94d5ba8..e0c8440 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/StatementMapper.java +++ b/src/main/java/org/springframework/data/r2dbc/core/StatementMapper.java @@ -188,7 +188,12 @@ public interface StatementMapper { * @return the {@link SelectSpec}. */ public SelectSpec withSort(Sort sort) { - return new SelectSpec(this.table, this.projectedFields, this.criteria, sort, this.page); + + if (sort.isSorted()) { + return new SelectSpec(this.table, this.projectedFields, this.criteria, sort, this.page); + } + + return new SelectSpec(this.table, this.projectedFields, this.criteria, this.sort, this.page); } /** diff --git a/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java index a48e6e9..38488e6 100644 --- a/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/core/AbstractDatabaseClientIntegrationTests.java @@ -443,10 +443,19 @@ public abstract class AbstractDatabaseClientIntegrationTests extends R2dbcIntegr databaseClient.select().from(LegoSet.class) // .orderBy(Sort.by(desc("id"))) // - .page(PageRequest.of(1, 1)).fetch().all() // + .page(PageRequest.of(2, 1)) // + .fetch().all() // .map(LegoSet::getId) // .as(StepVerifier::create) // - .expectNext(42064) // + .expectNext(42055) // + .verifyComplete(); + + databaseClient.select().from(LegoSet.class) // + .page(PageRequest.of(2, 1, Sort.by(Sort.Direction.ASC, "id"))) // + .fetch().all() // + .map(LegoSet::getId) // + .as(StepVerifier::create) // + .expectNext(42068) // .verifyComplete(); } diff --git a/src/test/java/org/springframework/data/r2dbc/core/StatementMapperUnitTests.java b/src/test/java/org/springframework/data/r2dbc/core/StatementMapperUnitTests.java index 5357284..371522f 100644 --- a/src/test/java/org/springframework/data/r2dbc/core/StatementMapperUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/core/StatementMapperUnitTests.java @@ -18,12 +18,12 @@ package org.springframework.data.r2dbc.core; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.Collections; + import org.junit.Test; -import org.springframework.data.r2dbc.core.DefaultReactiveDataAccessStrategy; -import org.springframework.data.r2dbc.core.DefaultStatementMapper; -import org.springframework.data.r2dbc.core.PreparedOperation; -import org.springframework.data.r2dbc.core.ReactiveDataAccessStrategy; -import org.springframework.data.r2dbc.core.StatementMapper; + +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.data.r2dbc.core.StatementMapper.UpdateSpec; import org.springframework.data.r2dbc.dialect.BindTarget; import org.springframework.data.r2dbc.dialect.PostgresDialect; @@ -69,4 +69,16 @@ public class StatementMapperUnitTests { verify(bindTarget).bind(0, "value"); verify(bindTarget).bind(1, "bar"); } + + @Test // gh-148 + public void shouldMapSelectWithPage() { + + StatementMapper.SelectSpec selectSpec = StatementMapper.SelectSpec.create("table") + .withProjection(Collections.singletonList("*")) + .withPage(PageRequest.of(1, 2, Sort.by(Sort.Direction.DESC, "id"))); + + PreparedOperation preparedOperation = mapper.getMappedObject(selectSpec); + + assertThat(preparedOperation.toQuery()).isEqualTo("SELECT table.* FROM table ORDER BY id DESC LIMIT 2 OFFSET 2"); + } }