From f5ba26eedffb6f87a3416732fae110d656aa20bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius=20Neves=20Voltolim=20Satelis?= Date: Sat, 19 Sep 2020 23:57:46 -0300 Subject: [PATCH] =?UTF-8?q?DATAJPA-1198=20-=20Consistently=20avoid=20toLow?= =?UTF-8?q?er(=E2=80=A6)=20translation=20in=20Querydsl=20case-insensitive?= =?UTF-8?q?=20ORDER=20BY=20translation=20for=20non-String=20properties.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original pull request: #428. --- .../data/jpa/repository/support/Querydsl.java | 3 ++- .../support/QuerydslIntegrationTests.java | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java b/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java index 500350102..0b2c160d4 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java @@ -47,6 +47,7 @@ import com.querydsl.jpa.impl.JPAQuery; * @author Thomas Darimont * @author Mark Paluch * @author Christoph Strobl + * @author Marcus Voltolim */ public class Querydsl { @@ -235,7 +236,7 @@ public class Querydsl { while (path != null) { - sortPropertyExpression = !path.hasNext() && order.isIgnoreCase() // + sortPropertyExpression = !path.hasNext() && order.isIgnoreCase() && String.class == path.getType() // ? Expressions.stringPath((Path) sortPropertyExpression, path.getSegment()).lower() // : Expressions.path(path.getType(), (Path) sortPropertyExpression, path.getSegment()); diff --git a/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java index 17bb9dafd..0282a15df 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java @@ -32,11 +32,14 @@ import org.springframework.transaction.annotation.Transactional; import com.querydsl.core.types.dsl.PathBuilder; import com.querydsl.jpa.JPQLQuery; +import java.util.stream.Stream; + /** * Integration tests for {@link Querydsl}. * * @author Thomas Darimont * @author Jens Schauder + * @author Marcus Voltolim */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:infrastructure.xml" }) @@ -52,7 +55,7 @@ public class QuerydslIntegrationTests { @Before public void setup() { - userPath = new PathBuilder(User.class, "user"); + userPath = new PathBuilder<>(User.class, "user"); querydsl = new Querydsl(em, userPath); userQuery = querydsl.createQuery().select(userPath); } @@ -67,4 +70,17 @@ public class QuerydslIntegrationTests { .doesNotContain("nulls first") // .doesNotContain("nulls last"); } + + @Test // DATAJPA-1198; DATAJPA-1779 + public void orderWithIgnoreCaseAddLowerOnlyStringType() { + // firstname (String); id (Integer); dateOfBirth (Date) + Sort.Order[] orders = Stream.of("firstname", "id", "dateOfBirth").map(name -> Sort.Order.asc(name).ignoreCase()).toArray(Sort.Order[]::new); + JPQLQuery result = querydsl.applySorting(Sort.by(orders), userQuery); + + assertThat(result).isNotNull(); + assertThat(result.toString()) // + .startsWith("select user") // + .endsWith("order by lower(user.firstname) asc, user.id asc, user.dateOfBirth asc"); + } + }