Skip to content

Commit 6621a39

Browse files
odrotbohmSergiiTsypanov
authored andcommitted
DATAJPA-1267 - Polishing.
Adapt to polished API for DATACMNS-1258. Related tickets: DATACMNS-1258. Original pull request: spring-projects#250.
1 parent 9d75ecb commit 6621a39

File tree

2 files changed

+14
-23
lines changed

2 files changed

+14
-23
lines changed

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

+14-19
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import java.util.regex.Matcher;
2828
import java.util.regex.Pattern;
2929

30+
import org.springframework.data.repository.query.SpelQueryContext;
31+
import org.springframework.data.repository.query.SpelQueryContext.SpelExtractor;
3032
import org.springframework.data.repository.query.parser.Part.Type;
31-
import org.springframework.data.repository.query.parser.QuotationMap;
32-
import org.springframework.data.repository.query.parser.SpelQueryContext;
3333
import org.springframework.lang.Nullable;
3434
import org.springframework.util.Assert;
3535
import org.springframework.util.ObjectUtils;
@@ -224,26 +224,22 @@ enum ParameterBindingParser {
224224
private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery(String query,
225225
List<ParameterBinding> bindings) {
226226

227-
SpelQueryContext.SpelExtractor spelExtractor = createSpelExtractor(query);
227+
SpelExtractor spelExtractor = createSpelExtractor(query);
228228

229-
String resultingQuery = spelExtractor.query();
230-
231-
Matcher matcher = PARAMETER_BINDING_PATTERN.matcher(spelExtractor.query());
232-
233-
QuotationMap quotationMap = new QuotationMap(spelExtractor.query());
229+
String resultingQuery = spelExtractor.getQueryString();
230+
Matcher matcher = PARAMETER_BINDING_PATTERN.matcher(resultingQuery);
234231

235232
while (matcher.find()) {
236233

237-
if (quotationMap.isQuoted(matcher.start())) {
234+
if (spelExtractor.isQuoted(matcher.start())) {
238235
continue;
239236
}
240237

241238
String parameterIndexString = matcher.group(INDEXED_PARAMETER_GROUP);
242239
String parameterName = parameterIndexString != null ? null : matcher.group(NAMED_PARAMETER_GROUP);
243240
Integer parameterIndex = parameterIndexString == null ? null : Integer.valueOf(parameterIndexString);
244241
String typeSource = matcher.group(COMPARISION_TYPE_GROUP);
245-
String expression = spelExtractor.parameterNameToSpelMap()
246-
.get(parameterName == null ? parameterIndexString : parameterName);
242+
String expression = spelExtractor.getParameter(parameterName == null ? parameterIndexString : parameterName);
247243
String replacement = null;
248244

249245
Assert.isTrue(parameterIndex != null || parameterName != null, "We need either a name or an index.");
@@ -291,7 +287,8 @@ private String parseParameterBindingsOfQueryIntoBindingsAndReturnCleanedQuery(St
291287
return resultingQuery;
292288
}
293289

294-
private SpelQueryContext.SpelExtractor createSpelExtractor(String queryWithSpel) {
290+
private SpelExtractor createSpelExtractor(String queryWithSpel) {
291+
295292
int greatestParameterIndex = tryFindGreatestParameterIndexIn(queryWithSpel);
296293

297294
boolean parametersShouldBeAccessedByIndex = greatestParameterIndex != -1;
@@ -318,7 +315,7 @@ private SpelQueryContext.SpelExtractor createSpelExtractor(String queryWithSpel)
318315

319316
BiFunction<String, String, String> parameterNameToReplacement = (prefix, name) -> fixedPrefix + name;
320317

321-
return new SpelQueryContext(indexToParameterName, parameterNameToReplacement).parse(queryWithSpel);
318+
return SpelQueryContext.of(indexToParameterName, parameterNameToReplacement).parse(queryWithSpel);
322319
}
323320

324321
private String replaceFirst(String text, String substring, String replacement) {
@@ -344,13 +341,11 @@ private int tryFindGreatestParameterIndexIn(String query) {
344341
return greatestParameterIndex;
345342
}
346343

347-
private void checkAndRegister(ParameterBinding binding, List<ParameterBinding> bindings) {
344+
private static void checkAndRegister(ParameterBinding binding, List<ParameterBinding> bindings) {
348345

349-
for (ParameterBinding existing : bindings) {
350-
if (existing.hasName(binding.getName()) || existing.hasPosition(binding.getPosition())) {
351-
Assert.isTrue(existing.equals(binding), String.format(MESSAGE, existing, binding));
352-
}
353-
}
346+
bindings.stream() //
347+
.filter(it -> it.hasName(binding.getName()) || it.hasPosition(binding.getPosition())) //
348+
.forEach(it -> Assert.isTrue(it.equals(binding), String.format(MESSAGE, it, binding)));
354349

355350
if (!bindings.contains(binding)) {
356351
bindings.add(binding);

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

-4
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,8 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import java.util.ArrayList;
19-
import java.util.List;
20-
2118
import org.assertj.core.api.SoftAssertions;
2219
import org.junit.Test;
23-
import org.springframework.data.jpa.repository.query.StringQuery.ParameterBinding;
2420
import org.springframework.data.jpa.repository.query.StringQuery.ParameterBindingParser;
2521

2622
/**

0 commit comments

Comments
 (0)