34
34
import org .springframework .data .repository .query .Parameter ;
35
35
import org .springframework .data .repository .query .Parameters ;
36
36
import org .springframework .data .repository .query .RepositoryQuery ;
37
- import org .springframework .data .repository .query .SpelQueryContext ;
38
37
import org .springframework .data .repository .query .ValueExpressionDelegate ;
39
38
import org .springframework .data .repository .query .ValueExpressionQueryRewriter ;
40
39
import org .springframework .lang .Nullable ;
58
57
*/
59
58
final class ReactiveStringBasedNeo4jQuery extends AbstractReactiveNeo4jQuery {
60
59
61
- /**
62
- * Used for extracting SpEL expressions inside Cypher query templates.
63
- */
64
- static final SpelQueryContext SPEL_QUERY_CONTEXT = SpelQueryContext
65
- .of (ReactiveStringBasedNeo4jQuery ::parameterNameSource , ReactiveStringBasedNeo4jQuery ::replacementSource );
66
-
67
60
private final ValueExpressionQueryRewriter .EvaluatingValueExpressionQueryRewriter queryRewriter ;
68
61
69
62
private final ValueExpressionQueryRewriter .QueryExpressionEvaluator parsedQuery ;
@@ -79,17 +72,17 @@ final class ReactiveStringBasedNeo4jQuery extends AbstractReactiveNeo4jQuery {
79
72
* @return A new instance of a String based Neo4j query.
80
73
*/
81
74
static ReactiveStringBasedNeo4jQuery create (ReactiveNeo4jOperations neo4jOperations ,
82
- Neo4jMappingContext mappingContext , ValueExpressionDelegate delegate ,
83
- Neo4jQueryMethod queryMethod , ProjectionFactory factory ) {
75
+ Neo4jMappingContext mappingContext , ValueExpressionDelegate delegate , Neo4jQueryMethod queryMethod ,
76
+ ProjectionFactory factory ) {
84
77
85
78
Query queryAnnotation = queryMethod .getQueryAnnotation ()
86
79
.orElseThrow (() -> new MappingException ("Expected @Query annotation on the query method" ));
87
80
88
81
String cypherTemplate = Optional .ofNullable (queryAnnotation .value ()).filter (StringUtils ::hasText )
89
82
.orElseThrow (() -> new MappingException ("Expected @Query annotation to have a value, but it did not" ));
90
83
91
- return new ReactiveStringBasedNeo4jQuery (neo4jOperations , mappingContext , delegate , queryMethod ,
92
- cypherTemplate , Neo4jQueryType .fromDefinition (queryAnnotation ), factory );
84
+ return new ReactiveStringBasedNeo4jQuery (neo4jOperations , mappingContext , delegate , queryMethod , cypherTemplate ,
85
+ Neo4jQueryType .fromDefinition (queryAnnotation ), factory );
93
86
}
94
87
95
88
/**
@@ -103,45 +96,44 @@ static ReactiveStringBasedNeo4jQuery create(ReactiveNeo4jOperations neo4jOperati
103
96
* @return A new instance of a String based Neo4j query.
104
97
*/
105
98
static ReactiveStringBasedNeo4jQuery create (ReactiveNeo4jOperations neo4jOperations ,
106
- Neo4jMappingContext mappingContext , ValueExpressionDelegate delegate ,
107
- Neo4jQueryMethod queryMethod , String cypherTemplate , ProjectionFactory factory ) {
99
+ Neo4jMappingContext mappingContext , ValueExpressionDelegate delegate , Neo4jQueryMethod queryMethod ,
100
+ String cypherTemplate , ProjectionFactory factory ) {
108
101
109
102
Assert .hasText (cypherTemplate , "Cannot create String based Neo4j query without a cypher template" );
110
103
111
- return new ReactiveStringBasedNeo4jQuery (neo4jOperations , mappingContext , delegate , queryMethod ,
112
- cypherTemplate , Neo4jQueryType .DEFAULT , factory );
104
+ return new ReactiveStringBasedNeo4jQuery (neo4jOperations , mappingContext , delegate , queryMethod , cypherTemplate ,
105
+ Neo4jQueryType .DEFAULT , factory );
113
106
}
114
107
115
108
private ReactiveStringBasedNeo4jQuery (ReactiveNeo4jOperations neo4jOperations , Neo4jMappingContext mappingContext ,
116
- ValueExpressionDelegate delegate , Neo4jQueryMethod queryMethod ,
117
- String cypherTemplate , Neo4jQueryType queryType , ProjectionFactory factory ) {
109
+ ValueExpressionDelegate delegate , Neo4jQueryMethod queryMethod , String cypherTemplate , Neo4jQueryType queryType ,
110
+ ProjectionFactory factory ) {
118
111
119
112
super (neo4jOperations , mappingContext , queryMethod , queryType , factory );
120
113
121
- this .queryRewriter = ValueExpressionQueryRewriter .of (delegate ,
122
- StringBasedNeo4jQuery ::parameterNameSource , StringBasedNeo4jQuery ::replacementSource );
114
+ this .queryRewriter = createQueryRewriter (delegate );
123
115
this .parsedQuery = queryRewriter .parse (cypherTemplate , queryMethod .getParameters ());
124
116
}
125
117
118
+ static ValueExpressionQueryRewriter .EvaluatingValueExpressionQueryRewriter createQueryRewriter (ValueExpressionDelegate delegate ) {
119
+ return ValueExpressionQueryRewriter .of (delegate , StringBasedNeo4jQuery ::parameterNameSource ,
120
+ StringBasedNeo4jQuery ::replacementSource );
121
+ }
122
+
126
123
@ Override
127
- protected <T extends Object > PreparedQuery <T > prepareQuery (Class <T > returnedType , Collection <PropertyFilter .ProjectedPath > includedProperties ,
128
- Neo4jParameterAccessor parameterAccessor , @ Nullable Neo4jQueryType queryType ,
129
- @ Nullable Supplier <BiFunction <TypeSystem , MapAccessor , ?>> mappingFunction , @ Nullable UnaryOperator <Integer > limitModifier ) {
124
+ protected <T extends Object > PreparedQuery <T > prepareQuery (Class <T > returnedType ,
125
+ Collection <PropertyFilter .ProjectedPath > includedProperties , Neo4jParameterAccessor parameterAccessor ,
126
+ @ Nullable Neo4jQueryType queryType , @ Nullable Supplier <BiFunction <TypeSystem , MapAccessor , ?>> mappingFunction ,
127
+ @ Nullable UnaryOperator <Integer > limitModifier ) {
130
128
131
129
Map <String , Object > boundParameters = bindParameters (parameterAccessor );
132
- QueryContext queryContext = new QueryContext (
133
- queryMethod .getRepositoryName () + "." + queryMethod .getName (),
134
- parsedQuery .getQueryString (),
135
- boundParameters
136
- );
130
+ QueryContext queryContext = new QueryContext (queryMethod .getRepositoryName () + "." + queryMethod .getName (),
131
+ parsedQuery .getQueryString (), boundParameters );
137
132
138
133
logWarningsIfNecessary (queryContext , parameterAccessor );
139
134
140
- return PreparedQuery .queryFor (returnedType )
141
- .withCypherQuery (queryContext .query )
142
- .withParameters (boundParameters )
143
- .usingMappingFunction (mappingFunction )
144
- .build ();
135
+ return PreparedQuery .queryFor (returnedType ).withCypherQuery (queryContext .query ).withParameters (boundParameters )
136
+ .usingMappingFunction (mappingFunction ).build ();
145
137
}
146
138
147
139
Map <String , Object > bindParameters (Neo4jParameterAccessor parameterAccessor ) {
0 commit comments