Browse Source

Use data commons expression marker.

See: #5027
Original pull request: #5038
pull/5040/head
Christoph Strobl 5 months ago committed by Mark Paluch
parent
commit
00ab16f92e
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/AggregationBlocks.java
  2. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/MongoCodeBlocks.java
  3. 5
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/MongoRepositoryContributor.java
  4. 16
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/QueryBlocks.java

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

@ -304,7 +304,7 @@ class AggregationBlocks { @@ -304,7 +304,7 @@ class AggregationBlocks {
VariableSnippet stageSnippet = Snippet.declare(builder)
.variable(Document.class, context.localVariable("stage_%s".formatted(stageCounter)))
.of(MongoCodeBlocks.asDocument(stage, parameterNames));
.of(MongoCodeBlocks.asDocument(context.getExpressionMarker(), stage, parameterNames));
builder.addStatement("$L.add($L)", stageListVariableName, stageSnippet.getVariableName());
stageCounter++;

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

@ -32,6 +32,7 @@ import org.springframework.data.mongodb.repository.aot.UpdateBlocks.UpdateCodeBl @@ -32,6 +32,7 @@ import org.springframework.data.mongodb.repository.aot.UpdateBlocks.UpdateCodeBl
import org.springframework.data.mongodb.repository.aot.UpdateBlocks.UpdateExecutionCodeBlockBuilder;
import org.springframework.data.mongodb.repository.query.MongoQueryMethod;
import org.springframework.data.repository.aot.generate.AotQueryMethodGenerationContext;
import org.springframework.data.repository.aot.generate.ExpressionMarker;
import org.springframework.javapoet.CodeBlock;
import org.springframework.javapoet.CodeBlock.Builder;
import org.springframework.util.NumberUtils;
@ -162,20 +163,20 @@ class MongoCodeBlocks { @@ -162,20 +163,20 @@ class MongoCodeBlocks {
return new GeoNearExecutionCodeBlockBuilder(context);
}
static CodeBlock asDocument(String source, String argNames) {
return asDocument(source, CodeBlock.of("$L", argNames));
static CodeBlock asDocument(ExpressionMarker expressionMarker, String source, String argNames) {
return asDocument(expressionMarker, source, CodeBlock.of("$L", argNames));
}
static CodeBlock asDocument(String source, CodeBlock arguments) {
static CodeBlock asDocument(ExpressionMarker expressionMarker, String source, CodeBlock arguments) {
Builder builder = CodeBlock.builder();
if (!StringUtils.hasText(source)) {
builder.add("new $T()", Document.class);
} else if (containsPlaceholder(source)) {
if (arguments.isEmpty()) {
builder.add("bindParameters(ExpressionMarker.class.getEnclosingMethod(), $S)", source);
builder.add("bindParameters($L, $S)", expressionMarker.enclosingMethod(), source);
} else {
builder.add("bindParameters(ExpressionMarker.class.getEnclosingMethod(), $S, $L)", source, arguments);
builder.add("bindParameters($L, $S, $L)", expressionMarker.enclosingMethod(), source, arguments);
}
} else {
builder.add("parse($S)", source);
@ -213,7 +214,7 @@ class MongoCodeBlocks { @@ -213,7 +214,7 @@ class MongoCodeBlocks {
}
Builder builder = CodeBlock.builder();
builder.add("($T) evaluate(ExpressionMarker.class.getEnclosingMethod(), $S$L)", targetType, value,
builder.add("($T) evaluate($L, $S$L)", targetType, context.getExpressionMarker().enclosingMethod(), value,
parameterNames);
return builder.build();
}

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

@ -216,7 +216,7 @@ public class MongoRepositoryContributor extends RepositoryContributor { @@ -216,7 +216,7 @@ public class MongoRepositoryContributor extends RepositoryContributor {
CodeBlock.Builder builder = CodeBlock.builder();
builder.addStatement("class ExpressionMarker{}");
// builder.addStatement("class ExpressionMarker{}");
builder.add(finalContribution.contribute(context));
return builder.build();
@ -241,9 +241,6 @@ public class MongoRepositoryContributor extends RepositoryContributor { @@ -241,9 +241,6 @@ public class MongoRepositoryContributor extends RepositoryContributor {
AotStringQuery aotStringQuery = queryCreator.createQuery(partTree, queryMethod, source);
query = new QueryInteraction(aotStringQuery,
partTree.isCountProjection(), partTree.isDelete(), partTree.isExistsProjection());
// if(partTree.isLimiting()) {
// query.s
// }
}
if (queryAnnotation != null && StringUtils.hasText(queryAnnotation.sort())) {

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

@ -238,14 +238,14 @@ class QueryBlocks { @@ -238,14 +238,14 @@ class QueryBlocks {
if (StringUtils.hasText(source.getQuery().getFieldsString())) {
VariableSnippet fields = Snippet.declare(builder).variable(Document.class, context.localVariable("fields"))
.of(MongoCodeBlocks.asDocument(source.getQuery().getFieldsString(), queryParameters.get()));
.of(MongoCodeBlocks.asDocument(context.getExpressionMarker(), source.getQuery().getFieldsString(), queryParameters.get()));
builder.addStatement("$L.setFieldsObject($L)", queryVariableName, fields.getVariableName());
}
if (StringUtils.hasText(source.getQuery().getSortString())) {
VariableSnippet sort = Snippet.declare(builder).variable(Document.class, context.localVariable("sort"))
.of(MongoCodeBlocks.asDocument(source.getQuery().getSortString(), getQueryParameters()));
.of(MongoCodeBlocks.asDocument(context.getExpressionMarker(), source.getQuery().getSortString(), getQueryParameters()));
builder.addStatement("$L.setSortObject($L)", queryVariableName, sort.getVariableName());
}
@ -306,12 +306,12 @@ class QueryBlocks { @@ -306,12 +306,12 @@ class QueryBlocks {
if (getQueryParameters().isEmpty()) {
builder.addStatement(
"$L.collation(collationOf(evaluate(ExpressionMarker.class.getEnclosingMethod(), $S)))",
queryVariableName, collationString);
"$L.collation(collationOf(evaluate($L, $S)))",
queryVariableName, context.getExpressionMarker().enclosingMethod(), collationString);
} else {
builder.addStatement(
"$L.collation(collationOf(evaluate(ExpressionMarker.class.getEnclosingMethod(), $S, $L)))",
queryVariableName, collationString, getQueryParameters());
"$L.collation(collationOf(evaluate($L, $S, $L)))",
queryVariableName, context.getExpressionMarker().enclosingMethod(), collationString, getQueryParameters());
}
}
}
@ -337,9 +337,9 @@ class QueryBlocks { @@ -337,9 +337,9 @@ class QueryBlocks {
} else if (MongoCodeBlocks.containsPlaceholder(source)) {
Builder builder = CodeBlock.builder();
if (getQueryParameters().isEmpty()) {
builder.add("createQuery(ExpressionMarker.class.getEnclosingMethod(), $S)", source);
builder.add("createQuery($L, $S)", context.getExpressionMarker().enclosingMethod(), source);
} else {
builder.add("createQuery(ExpressionMarker.class.getEnclosingMethod(), $S, $L)", source, getQueryParameters());
builder.add("createQuery($L, $S, $L)", context.getExpressionMarker().enclosingMethod(), source, getQueryParameters());
}
return builder.build();
} else {

Loading…
Cancel
Save