3434import org .springframework .data .repository .query .Parameter ;
3535import org .springframework .data .repository .query .Parameters ;
3636import org .springframework .data .repository .query .RepositoryQuery ;
37- import org .springframework .data .repository .query .SpelQueryContext ;
3837import org .springframework .data .repository .query .ValueExpressionDelegate ;
3938import org .springframework .data .repository .query .ValueExpressionQueryRewriter ;
4039import org .springframework .lang .Nullable ;
5857 */
5958final class ReactiveStringBasedNeo4jQuery extends AbstractReactiveNeo4jQuery {
6059
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-
6760 private final ValueExpressionQueryRewriter .EvaluatingValueExpressionQueryRewriter queryRewriter ;
6861
6962 private final ValueExpressionQueryRewriter .QueryExpressionEvaluator parsedQuery ;
@@ -79,17 +72,17 @@ final class ReactiveStringBasedNeo4jQuery extends AbstractReactiveNeo4jQuery {
7972 * @return A new instance of a String based Neo4j query.
8073 */
8174 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 ) {
8477
8578 Query queryAnnotation = queryMethod .getQueryAnnotation ()
8679 .orElseThrow (() -> new MappingException ("Expected @Query annotation on the query method" ));
8780
8881 String cypherTemplate = Optional .ofNullable (queryAnnotation .value ()).filter (StringUtils ::hasText )
8982 .orElseThrow (() -> new MappingException ("Expected @Query annotation to have a value, but it did not" ));
9083
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 );
9386 }
9487
9588 /**
@@ -103,45 +96,44 @@ static ReactiveStringBasedNeo4jQuery create(ReactiveNeo4jOperations neo4jOperati
10396 * @return A new instance of a String based Neo4j query.
10497 */
10598 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 ) {
108101
109102 Assert .hasText (cypherTemplate , "Cannot create String based Neo4j query without a cypher template" );
110103
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 );
113106 }
114107
115108 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 ) {
118111
119112 super (neo4jOperations , mappingContext , queryMethod , queryType , factory );
120113
121- this .queryRewriter = ValueExpressionQueryRewriter .of (delegate ,
122- StringBasedNeo4jQuery ::parameterNameSource , StringBasedNeo4jQuery ::replacementSource );
114+ this .queryRewriter = createQueryRewriter (delegate );
123115 this .parsedQuery = queryRewriter .parse (cypherTemplate , queryMethod .getParameters ());
124116 }
125117
118+ static ValueExpressionQueryRewriter .EvaluatingValueExpressionQueryRewriter createQueryRewriter (ValueExpressionDelegate delegate ) {
119+ return ValueExpressionQueryRewriter .of (delegate , StringBasedNeo4jQuery ::parameterNameSource ,
120+ StringBasedNeo4jQuery ::replacementSource );
121+ }
122+
126123 @ 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 ) {
130128
131129 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 );
137132
138133 logWarningsIfNecessary (queryContext , parameterAccessor );
139134
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 ();
145137 }
146138
147139 Map <String , Object > bindParameters (Neo4jParameterAccessor parameterAccessor ) {
0 commit comments