Skip to content

Commit 71192a9

Browse files
Update method metadata rendering
1 parent 253a78c commit 71192a9

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/MongoRepositoryContributor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ protected void customizeConstructor(AotRepositoryConstructorBuilder constructorB
109109
}
110110

111111
QueryInteraction query = createStringQuery(getRepositoryInformation(), queryMethod,
112-
AnnotatedElementUtils.findMergedAnnotation(method, Query.class), method.getParameterCount());
112+
AnnotatedElementUtils.findMergedAnnotation(method, Query.class));
113113

114114
if (queryMethod.isGeoNearQuery() || (queryMethod.getParameters().getMaxDistanceIndex() != -1
115115
&& queryMethod.getReturnType().isCollectionLike())) {
116-
NearQueryInteraction near = new NearQueryInteraction(query);
116+
NearQueryInteraction near = new NearQueryInteraction(query, queryMethod.getParameters());
117117
return nearQueryMethodContributor(queryMethod, near);
118118
}
119119

@@ -160,7 +160,7 @@ protected void customizeConstructor(AotRepositoryConstructorBuilder constructorB
160160

161161
@SuppressWarnings("NullAway")
162162
private QueryInteraction createStringQuery(RepositoryInformation repositoryInformation, MongoQueryMethod queryMethod,
163-
@Nullable Query queryAnnotation, int parameterCount) {
163+
@Nullable Query queryAnnotation) {
164164

165165
QueryInteraction query;
166166
if (queryMethod.hasAnnotatedQuery() && queryAnnotation != null) {

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/NearQueryInteraction.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
import java.util.LinkedHashMap;
1919
import java.util.Map;
2020

21-
import org.springframework.data.mongodb.core.query.Query;
21+
import org.springframework.data.mongodb.repository.query.MongoParameters;
2222
import org.springframework.data.repository.aot.generate.QueryMetadata;
23-
import org.springframework.util.StringUtils;
2423

2524
/**
2625
* An {@link MongoInteraction} to execute a query.
@@ -32,10 +31,12 @@ class NearQueryInteraction extends MongoInteraction implements QueryMetadata {
3231

3332
private final InteractionType interactionType;
3433
private final QueryInteraction query;
34+
private final MongoParameters parameters;
3535

36-
NearQueryInteraction(QueryInteraction query) {
36+
NearQueryInteraction(QueryInteraction query, MongoParameters parameters) {
3737
interactionType = InteractionType.QUERY;
3838
this.query = query;
39+
this.parameters = parameters;
3940
}
4041

4142
@Override
@@ -51,9 +52,17 @@ public QueryInteraction getQuery() {
5152
public Map<String, Object> serialize() {
5253

5354
Map<String, Object> serialized = new LinkedHashMap<>();
54-
55-
56-
55+
serialized.put("near", "?%s".formatted(parameters.getNearIndex()));
56+
if (parameters.getRangeIndex() != -1) {
57+
serialized.put("minDistance", "?%s".formatted(parameters.getRangeIndex()));
58+
serialized.put("maxDistance", "?%s".formatted(parameters.getRangeIndex()));
59+
} else if (parameters.getMaxDistanceIndex() != -1) {
60+
serialized.put("minDistance", "?%s".formatted(parameters.getMaxDistanceIndex()));
61+
}
62+
Object filter = query.serialize().get("filter"); // TODO: filter position index can be off due to bindable params
63+
if (filter != null) {
64+
serialized.put("filter", filter);
65+
}
5766
return serialized;
5867
}
5968
}

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/aot/MongoRepositoryMetadataTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515
*/
1616
package org.springframework.data.mongodb.repository.aot;
1717

18-
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.*;
19-
import static org.assertj.core.api.Assertions.*;
20-
import static org.mockito.Mockito.*;
18+
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
19+
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.mockito.Mockito.mock;
2121

2222
import example.aot.UserRepository;
2323

2424
import java.io.IOException;
2525
import java.nio.charset.StandardCharsets;
26+
import java.util.List;
2627

2728
import org.junit.jupiter.api.Disabled;
2829
import org.junit.jupiter.api.Test;
2930
import org.junit.jupiter.api.extension.ExtendWith;
30-
3131
import org.springframework.beans.factory.annotation.Autowired;
3232
import org.springframework.context.annotation.Bean;
3333
import org.springframework.context.annotation.Configuration;
@@ -150,7 +150,7 @@ void shouldDocumentAggregation() throws IOException {
150150

151151
assertThatJson(json).inPath("$.methods[?(@.name == 'findAllLastnames')].query").isArray().element(0).isObject()
152152
.containsEntry("pipeline",
153-
"[{ '$match' : { 'last_name' : { '$ne' : null } } }, { '$project': { '_id' : '$last_name' } }]");
153+
List.of("{ '$match' : { 'last_name' : { '$ne' : null } } }", "{ '$project': { '_id' : '$last_name' } }"));
154154
}
155155

156156
@Test // GH-4964
@@ -165,7 +165,7 @@ void shouldDocumentPipelineUpdate() throws IOException {
165165

166166
assertThatJson(json).inPath("$.methods[?(@.name == 'findAndIncrementVisitsViaPipelineByLastname')].query").isArray()
167167
.element(0).isObject().containsEntry("filter", "{'lastname':?0}").containsEntry("update-pipeline",
168-
"[{ '$set' : { 'visits' : { '$ifNull' : [ {'$add' : [ '$visits', ?1 ] }, ?1 ] } } }]");
168+
List.of("{ '$set' : { 'visits' : { '$ifNull' : [ {'$add' : [ '$visits', ?1 ] }, ?1 ] } } }"));
169169
}
170170

171171
@Test // GH-4964

0 commit comments

Comments
 (0)