Skip to content

Commit b93bd07

Browse files
Taylorchristophstrobl
authored andcommitted
DATAES-552 - @query annotation fail when passing over 10 parameters
Updated the replacePlaceholders methods to use replaceFirst to prevent duplication substitutions. Original Pull Request: spring-projects#267
1 parent 16bf845 commit b93bd07

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
* @author Rizwan Idrees
3333
* @author Mohsin Husen
3434
* @author Mark Paluch
35+
* @author Taylor Ono
3536
*/
3637
public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQuery {
3738

@@ -86,8 +87,9 @@ private String replacePlaceholders(String input, ParametersParameterAccessor acc
8687
String result = input;
8788
while (matcher.find()) {
8889
String group = matcher.group();
90+
group = "\\" + group;
8991
int index = Integer.parseInt(matcher.group(1));
90-
result = result.replace(group, getParameterWithIndex(accessor, index));
92+
result = result.replaceFirst(group, getParameterWithIndex(accessor, index));
9193
}
9294
return result;
9395
}

src/main/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQuery.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
/**
2828
* @author Christoph Strobl
29+
* @author Taylor Ono
2930
* @since 3.2
3031
*/
3132
public class ReactiveElasticsearchStringQuery extends AbstractReactiveElasticsearchRepositoryQuery {
@@ -60,8 +61,9 @@ private String replacePlaceholders(String input, ElasticsearchParameterAccessor
6061
String result = input;
6162
while (matcher.find()) {
6263
String group = matcher.group();
64+
group = "\\" + group;
6365
int index = Integer.parseInt(matcher.group(1));
64-
result = result.replace(group, getParameterWithIndex(accessor, index));
66+
result = result.replaceFirst(group, getParameterWithIndex(accessor, index));
6567
}
6668
return result;
6769
}

src/test/java/org/springframework/data/elasticsearch/repository/query/ReactiveElasticsearchStringQueryUnitTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,20 @@ public void bindsExpressionPropertyCorrectly() throws Exception {
8787
assertThat(((StringQuery) query).getSource()).isEqualTo(reference.getSource());
8888
}
8989

90+
@Test // DATAES-552
91+
public void shouldReplaceLotsOfParametersCorrectly() throws Exception {
92+
93+
ReactiveElasticsearchStringQuery elasticsearchStringQuery = createQueryForMethod("findWithQuiteSomeParameters",
94+
String.class, String.class, String.class, String.class, String.class, String.class, String.class, String.class,
95+
String.class, String.class, String.class, String.class);
96+
StubParameterAccessor accesor = new StubParameterAccessor("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
97+
"l");
98+
org.springframework.data.elasticsearch.core.query.Query query = elasticsearchStringQuery.createQuery(accesor);
99+
StringQuery reference = new StringQuery("name:(a, b, c, d, e, f, g, h, i, j, k, l)");
100+
assertThat(query).isInstanceOf(StringQuery.class);
101+
assertThat(((StringQuery) query).getSource()).isEqualTo(reference.getSource());
102+
}
103+
90104
private ReactiveElasticsearchStringQuery createQueryForMethod(String name, Class<?>... parameters) throws Exception {
91105

92106
Method method = SampleRepository.class.getMethod(name, parameters);
@@ -104,5 +118,9 @@ private interface SampleRepository extends Repository<Person, String> {
104118

105119
@Query("{ 'bool' : { 'must' : { 'term' : { 'name' : '?#{[0]}' } } } }")
106120
Flux<Person> findByNameWithExpression(String param0);
121+
122+
@Query(value = "name:(?0, ?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)")
123+
Person findWithQuiteSomeParameters(String arg0, String arg1, String arg2, String arg3, String arg4, String arg5,
124+
String arg6, String arg7, String arg8, String arg9, String arg10, String arg11);
107125
}
108126
}

0 commit comments

Comments
 (0)