Skip to content

Commit c12bc1c

Browse files
committed
Remove template dependency from string n1ql, also fix StringN1ql tests.
Closes #1470.
1 parent 3bc7b37 commit c12bc1c

File tree

8 files changed

+96
-134
lines changed

8 files changed

+96
-134
lines changed

src/main/java/org/springframework/data/couchbase/core/ReactiveFindByQueryOperationSupport.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ public Mono<Boolean> exists() {
237237
}
238238

239239
private String assembleEntityQuery(final boolean count, String[] distinctFields, String scope, String collection) {
240-
return query.toN1qlSelectString(template, scope, collection, this.domainType, this.returnType, count,
240+
return query.toN1qlSelectString(template.getConverter(), template.getBucketName(), scope, collection,
241+
this.domainType, this.returnType, count,
241242
query.getDistinctFields() != null ? query.getDistinctFields() : distinctFields, fields);
242243
}
243244
}

src/main/java/org/springframework/data/couchbase/core/ReactiveRemoveByQueryOperationSupport.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ public RemoveByQueryConsistentWith<T> withConsistency(final QueryScanConsistency
120120
}
121121

122122
private String assembleDeleteQuery(String scope, String collection) {
123-
return query.toN1qlRemoveString(template, scope, collection, this.domainType);
123+
return query.toN1qlRemoveString(template.getConverter(), template.getBucketName(), scope, collection,
124+
this.domainType);
124125
}
125126

126127
@Override

src/main/java/org/springframework/data/couchbase/core/convert/join/N1qlJoinResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ public static <L, R> String buildQuery(ReactiveCouchbaseTemplate template, Strin
7373
String from = "FROM " + keySpacePair.lhs.keyspace + " lks " + useLKS + joinType + " " + keySpacePair.rhs.keyspace
7474
+ " rks";
7575

76-
StringBasedN1qlQueryParser.N1qlSpelValues n1qlL = Query.getN1qlSpelValues(template, null,
76+
StringBasedN1qlQueryParser.N1qlSpelValues n1qlL = Query.getN1qlSpelValues(template.getConverter(), null, scope,
7777
keySpacePair.lhs.collection, parameters.getEntityTypeInfo().getType(), parameters.getEntityTypeInfo().getType(),
7878
false, null, null);
7979
String onLks = "lks." + n1qlL.filter;
8080

81-
StringBasedN1qlQueryParser.N1qlSpelValues n1qlR = Query.getN1qlSpelValues(template, null,
81+
StringBasedN1qlQueryParser.N1qlSpelValues n1qlR = Query.getN1qlSpelValues(template.getConverter(), null, scope,
8282
keySpacePair.rhs.collection, parameters.getAssociatedEntityTypeInfo().getType(),
8383
parameters.getAssociatedEntityTypeInfo().getType(), false, null, null);
8484
String onRks = "rks." + n1qlR.filter;

src/main/java/org/springframework/data/couchbase/core/query/N1QLQuery.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.data.couchbase.core.query;
1717

18-
import org.springframework.data.couchbase.core.ReactiveCouchbaseTemplate;
18+
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
1919

2020
import com.couchbase.client.java.json.JsonObject;
2121
import com.couchbase.client.java.query.QueryOptions;
@@ -48,8 +48,9 @@ public JsonObject n1ql() {
4848
}
4949

5050
@Override
51-
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
52-
Class domainClass, Class returnClass, boolean isCount, String[] distinctFields, String[] fields) {
51+
public String toN1qlSelectString(CouchbaseConverter template, String bucketName, String scopeName,
52+
String collectionName, Class domainClass, Class returnClass, boolean isCount, String[] distinctFields,
53+
String[] fields) {
5354
return expression.toString();
5455
}
5556
}

src/main/java/org/springframework/data/couchbase/core/query/Query.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -343,53 +343,54 @@ public String export(int[]... paramIndexPtrHolder) { // used only by tests
343343
*/
344344
@Deprecated
345345
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, Class domainClass, boolean isCount) {
346-
return toN1qlSelectString(template, null, null, domainClass, null, isCount, null, null);
346+
return toN1qlSelectString(template.getConverter(), template.getBucketName(), null, null, domainClass, null, isCount,
347+
null, null);
347348
}
348349

349-
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
350-
Class domainClass, Class returnClass, boolean isCount, String[] distinctFields, String[] fields) {
351-
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(template, scopeName, collectionName, domainClass,
352-
returnClass, isCount, distinctFields, fields);
350+
public String toN1qlSelectString(CouchbaseConverter converter, String bucketName, String scopeName,
351+
String collectionName, Class domainClass, Class returnClass, boolean isCount, String[] distinctFields,
352+
String[] fields) {
353+
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(converter, bucketName, scopeName, collectionName,
354+
domainClass, returnClass, isCount, distinctFields, fields);
353355
final StringBuilder statement = new StringBuilder();
354356
appendString(statement, n1ql.selectEntity); // select ...
355357
appendWhereString(statement, n1ql.filter); // typeKey = typeValue
356-
appendWhere(statement, new int[] { 0 }, template.getConverter()); // criteria on this Query
358+
appendWhere(statement, new int[] { 0 }, converter); // criteria on this Query
357359
if (!isCount) {
358360
appendSort(statement);
359361
appendSkipAndLimit(statement);
360362
}
361363
return statement.toString();
362364
}
363365

364-
public String toN1qlRemoveString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
365-
Class domainClass) {
366-
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(template, scopeName, collectionName, domainClass,
367-
null, false, null, null);
366+
public String toN1qlRemoveString(CouchbaseConverter converter, String bucketName, String scopeName,
367+
String collectionName, Class domainClass) {
368+
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(converter, bucketName, scopeName, collectionName,
369+
domainClass, null, false, null, null);
368370
final StringBuilder statement = new StringBuilder();
369371
appendString(statement, n1ql.delete); // delete ...
370372
appendWhereString(statement, n1ql.filter); // typeKey = typeValue
371-
appendWhere(statement, null, template.getConverter()); // criteria on this Query
373+
appendWhere(statement, null, converter); // criteria on this Query
372374
appendString(statement, n1ql.returning);
373375
return statement.toString();
374376
}
375377

376-
public static StringBasedN1qlQueryParser.N1qlSpelValues getN1qlSpelValues(ReactiveCouchbaseTemplate template,
377-
String scopeName, String collectionName, Class domainClass, Class returnClass, boolean isCount,
378+
public static StringBasedN1qlQueryParser.N1qlSpelValues getN1qlSpelValues(CouchbaseConverter converter,
379+
String bucketName, String scopeName, String collectionName, Class domainClass, Class returnClass, boolean isCount,
378380
String[] distinctFields, String[] fields) {
379-
String typeKey = template.getConverter().getTypeKey();
380-
final CouchbasePersistentEntity<?> persistentEntity = template.getConverter().getMappingContext()
381+
String typeKey = converter.getTypeKey();
382+
final CouchbasePersistentEntity<?> persistentEntity = converter.getMappingContext()
381383
.getRequiredPersistentEntity(domainClass);
382384
MappingCouchbaseEntityInformation<?, Object> info = new MappingCouchbaseEntityInformation<>(persistentEntity);
383385
String typeValue = info.getJavaType().getName();
384386
TypeInformation<?> typeInfo = ClassTypeInformation.from(info.getJavaType());
385-
Alias alias = template.getConverter().getTypeAlias(typeInfo);
387+
Alias alias = converter.getTypeAlias(typeInfo);
386388
if (alias != null && alias.isPresent()) {
387389
typeValue = alias.toString();
388390
}
389391

390-
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(template.getBucketName(), scopeName,
391-
collectionName, template.getConverter(), domainClass, returnClass, typeKey, typeValue, isCount, distinctFields,
392-
fields);
392+
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(bucketName, scopeName, collectionName, converter,
393+
domainClass, returnClass, typeKey, typeValue, isCount, distinctFields, fields);
393394
return sbnqp.getStatementContext();
394395
}
395396

src/main/java/org/springframework/data/couchbase/core/query/StringQuery.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import java.util.Locale;
1919

20-
import org.springframework.data.couchbase.core.ReactiveCouchbaseTemplate;
20+
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
2121
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentEntity;
2222
import org.springframework.data.couchbase.core.support.TemplateUtils;
2323
import org.springframework.data.couchbase.repository.query.CouchbaseQueryMethod;
@@ -66,10 +66,10 @@ public StringQuery(CouchbaseQueryMethod queryMethod, String n1qlString,
6666
}
6767

6868
@Override
69-
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scope, String collection,
69+
public String toN1qlSelectString(CouchbaseConverter converter, String bucketName, String scope, String collection,
7070
Class domainClass, Class resultClass, boolean isCount, String[] distinctFields, String[] fields) {
7171

72-
StringBasedN1qlQueryParser parser = getStringN1qlQueryParser(template, scope, collection, domainClass,
72+
StringBasedN1qlQueryParser parser = getStringN1qlQueryParser(converter, bucketName, scope, collection, domainClass,
7373
distinctFields, fields);
7474

7575
N1QLExpression parsedExpression = parser.getExpression(inlineN1qlQuery, queryMethod, parameterAccessor,
@@ -100,7 +100,7 @@ public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scop
100100
} else { // named parameters or no parameters, no index required
101101
paramIndexPtr = new int[] { -1 };
102102
}
103-
appendWhere(statement, paramIndexPtr, template.getConverter()); // criteria on this Query - should be empty for
103+
appendWhere(statement, paramIndexPtr, converter); // criteria on this Query - should be empty for
104104
if (!isCount) {
105105
appendSort(statement);
106106
appendSkipAndLimit(statement);
@@ -111,22 +111,22 @@ public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scop
111111
return statement.toString();
112112
}
113113

114-
private StringBasedN1qlQueryParser getStringN1qlQueryParser(ReactiveCouchbaseTemplate template, String scopeName,
115-
String collectionName, Class domainClass, String[] distinctFields, String[] fields) {
116-
String typeKey = template.getConverter().getTypeKey();
117-
final CouchbasePersistentEntity<?> persistentEntity = template.getConverter().getMappingContext()
114+
private StringBasedN1qlQueryParser getStringN1qlQueryParser(CouchbaseConverter converter, String bucketName,
115+
String scopeName, String collectionName, Class domainClass, String[] distinctFields, String[] fields) {
116+
String typeKey = converter.getTypeKey();
117+
final CouchbasePersistentEntity<?> persistentEntity = converter.getMappingContext()
118118
.getRequiredPersistentEntity(domainClass);
119119
MappingCouchbaseEntityInformation<?, Object> info = new MappingCouchbaseEntityInformation<>(persistentEntity);
120120
String typeValue = info.getJavaType().getName();
121121
TypeInformation<?> typeInfo = ClassTypeInformation.from(info.getJavaType());
122-
Alias alias = template.getConverter().getTypeAlias(typeInfo);
122+
Alias alias = converter.getTypeAlias(typeInfo);
123123
if (alias != null && alias.isPresent()) {
124124
typeValue = alias.toString();
125125
}
126126
// there are no options for distinct and fields for @Query
127-
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(inlineN1qlQuery, queryMethod,
128-
template.getBucketName(), scopeName, collectionName, template.getConverter(), typeKey, typeValue,
129-
parameterAccessor, new SpelExpressionParser(), evaluationContextProvider);
127+
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(inlineN1qlQuery, queryMethod, bucketName,
128+
scopeName, collectionName, converter, typeKey, typeValue, parameterAccessor, new SpelExpressionParser(),
129+
evaluationContextProvider);
130130

131131
return sbnqp;
132132
}
@@ -139,8 +139,9 @@ private StringBasedN1qlQueryParser getStringN1qlQueryParser(ReactiveCouchbaseTem
139139
* @param domainClass
140140
*/
141141
@Override
142-
public String toN1qlRemoveString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
143-
Class domainClass) {
144-
return toN1qlSelectString(template, scopeName, collectionName, domainClass, domainClass, false, null, null);
142+
public String toN1qlRemoveString(CouchbaseConverter converter, String bucketName, String scopeName,
143+
String collectionName, Class domainClass) {
144+
return toN1qlSelectString(converter, bucketName, scopeName, collectionName, domainClass, domainClass, false, null,
145+
null);
145146
}
146147
}

0 commit comments

Comments
 (0)