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.
This commit is contained in:
@@ -79,6 +79,7 @@ import org.springframework.util.StringUtils;
|
||||
* @author Florian Lüdiger
|
||||
* @author Grégoire Druant
|
||||
* @author Mohammad Hewedy
|
||||
* @author Andriy Redko
|
||||
*/
|
||||
public abstract class QueryUtils {
|
||||
|
||||
@@ -89,8 +90,8 @@ public abstract class QueryUtils {
|
||||
// Z Separator
|
||||
// Cc Control
|
||||
// Cf Format
|
||||
// P Punctuation
|
||||
private static final String IDENTIFIER = "[._[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{P}]]+";
|
||||
// Punct Punctuation
|
||||
private static final String IDENTIFIER = "[._$[\\P{Z}&&\\P{Cc}&&\\P{Cf}&&\\P{Punct}]]+";
|
||||
static final String COLON_NO_DOUBLE_COLON = "(?<![:\\\\]):";
|
||||
static final String IDENTIFIER_GROUP = String.format("(%s)", IDENTIFIER);
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ import org.springframework.data.repository.query.parser.Part.Type;
|
||||
* @author Thomas Darimont
|
||||
* @author Jens Schauder
|
||||
* @author Nils Borrmann
|
||||
* @author Andriy Redko
|
||||
*/
|
||||
public class StringQueryUnitTests {
|
||||
|
||||
@@ -540,6 +541,34 @@ public class StringQueryUnitTests {
|
||||
softly.assertAll();
|
||||
}
|
||||
|
||||
@Test // DATAJPA-1652
|
||||
public void usingPipesWithNamedParameter() {
|
||||
|
||||
String queryString = "SELECT u FROM User u WHERE u.lastname LIKE '%'||:name||'%'";
|
||||
StringQuery query = new StringQuery(queryString);
|
||||
|
||||
softly.assertThat(query.getQueryString()).isEqualTo(queryString);
|
||||
softly.assertThat(query.hasParameterBindings()).isTrue();
|
||||
softly.assertThat(query.getParameterBindings()).hasSize(1);
|
||||
softly.assertThat(query.getParameterBindings().get(0).getName()).isEqualTo("name");
|
||||
|
||||
softly.assertAll();
|
||||
}
|
||||
|
||||
@Test // DATAJPA-1652
|
||||
public void usingGreaterThanWithNamedParameter() {
|
||||
|
||||
String queryString = "SELECT u FROM User u WHERE :age>u.age";
|
||||
StringQuery query = new StringQuery(queryString);
|
||||
|
||||
softly.assertThat(query.getQueryString()).isEqualTo(queryString);
|
||||
softly.assertThat(query.hasParameterBindings()).isTrue();
|
||||
softly.assertThat(query.getParameterBindings()).hasSize(1);
|
||||
softly.assertThat(query.getParameterBindings().get(0).getName()).isEqualTo("age");
|
||||
|
||||
softly.assertAll();
|
||||
}
|
||||
|
||||
public void checkNumberOfNamedParameters(String query, int expectedSize, String label) {
|
||||
|
||||
DeclaredQuery declaredQuery = DeclaredQuery.of(query);
|
||||
|
||||
Reference in New Issue
Block a user