Skip to content

Commit 60241e7

Browse files
retaschauder
authored andcommitted
DATAJPA-1652 - Support for operators to directly follow named parameters.
Since `\P{P}` doesn't include things like `<`, `>`, or `|` those where considered part of the parameter name when they weren't separated from it by whitespace. This is now fixed. Original pull request: #405.
1 parent e279334 commit 60241e7

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
* @author Florian Lüdiger
8080
* @author Grégoire Druant
8181
* @author Mohammad Hewedy
82+
* @author Andriy Redko
8283
*/
8384
public abstract class QueryUtils {
8485

@@ -89,8 +90,8 @@ public abstract class QueryUtils {
8990
// Z Separator
9091
// Cc Control
9192
// Cf Format
92-
// P Punctuation
93-
private static final String IDENTIFIER = "[._[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{P}]]+";
93+
// Punct Punctuation
94+
private static final String IDENTIFIER = "[._$[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{Punct}]]+";
9495
static final String COLON_NO_DOUBLE_COLON = "(?<![:\\\\]):";
9596
static final String IDENTIFIER_GROUP = String.format("(%s)", IDENTIFIER);
9697

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

+29
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @author Thomas Darimont
3838
* @author Jens Schauder
3939
* @author Nils Borrmann
40+
* @author Andriy Redko
4041
*/
4142
public class StringQueryUnitTests {
4243

@@ -540,6 +541,34 @@ public void isNotDefaultProjection() {
540541
softly.assertAll();
541542
}
542543

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

545574
DeclaredQuery declaredQuery = DeclaredQuery.of(query);

0 commit comments

Comments
 (0)