Skip to content

Commit 3084969

Browse files
committed
DATAJPA-1652: Using || (pipes) along with named parameters in custom queries raises an exception
1 parent 9d5c13e commit 3084969

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ public abstract class QueryUtils {
8989
// Z Separator
9090
// Cc Control
9191
// Cf Format
92-
// P Punctuation
93-
private static final String IDENTIFIER = "[._[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{P}]]+";
92+
// Punct Punctuation
93+
private static final String IDENTIFIER = "[._$#[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{Punct}]]+";
9494
static final String COLON_NO_DOUBLE_COLON = "(?<![:\\\\]):";
9595
static final String IDENTIFIER_GROUP = String.format("(%s)", IDENTIFIER);
9696

src/test/java/org/springframework/data/jpa/repository/query/StringQueryUnitTests.java

+28
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,34 @@ public void isNotDefaultProjection() {
540540
softly.assertAll();
541541
}
542542

543+
@Test // DATAJPA-1652
544+
public void usingPipesWithNamedParameter() {
545+
546+
String queryString = "SELECT u FROM User u WHERE u.lastname LIKE '%'||:name||'%'";
547+
StringQuery query = new StringQuery(queryString);
548+
549+
softly.assertThat(query.getQueryString()).isEqualTo(queryString);
550+
softly.assertThat(query.hasParameterBindings()).isTrue();
551+
softly.assertThat(query.getParameterBindings()).hasSize(1);
552+
softly.assertThat(query.getParameterBindings().get(0).getName()).isEqualTo("name");
553+
554+
softly.assertAll();
555+
}
556+
557+
@Test // DATAJPA-1652
558+
public void usingGreaterThanWithNamedParameter() {
559+
560+
String queryString = "SELECT u FROM User u WHERE :age<u.age";
561+
StringQuery query = new StringQuery(queryString);
562+
563+
softly.assertThat(query.getQueryString()).isEqualTo(queryString);
564+
softly.assertThat(query.hasParameterBindings()).isTrue();
565+
softly.assertThat(query.getParameterBindings()).hasSize(1);
566+
softly.assertThat(query.getParameterBindings().get(0).getName()).isEqualTo("age");
567+
568+
softly.assertAll();
569+
}
570+
543571
public void checkNumberOfNamedParameters(String query, int expectedSize, String label) {
544572

545573
DeclaredQuery declaredQuery = DeclaredQuery.of(query);

0 commit comments

Comments
 (0)