Skip to content

Remove template dependency from string n1ql, also fix StringN1ql tests. #1471

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,8 @@ public Mono<Boolean> exists() {
}

private String assembleEntityQuery(final boolean count, String[] distinctFields, String scope, String collection) {
return query.toN1qlSelectString(template, scope, collection, this.domainType, this.returnType, count,
return query.toN1qlSelectString(template.getConverter(), template.getBucketName(), scope, collection,
this.domainType, this.returnType, count,
query.getDistinctFields() != null ? query.getDistinctFields() : distinctFields, fields);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ public RemoveByQueryConsistentWith<T> withConsistency(final QueryScanConsistency
}

private String assembleDeleteQuery(String scope, String collection) {
return query.toN1qlRemoveString(template, scope, collection, this.domainType);
return query.toN1qlRemoveString(template.getConverter(), template.getBucketName(), scope, collection,
this.domainType);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,12 @@ public static <L, R> String buildQuery(ReactiveCouchbaseTemplate template, Strin
String from = "FROM " + keySpacePair.lhs.keyspace + " lks " + useLKS + joinType + " " + keySpacePair.rhs.keyspace
+ " rks";

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

StringBasedN1qlQueryParser.N1qlSpelValues n1qlR = Query.getN1qlSpelValues(template, null,
StringBasedN1qlQueryParser.N1qlSpelValues n1qlR = Query.getN1qlSpelValues(template.getConverter(), null, scope,
keySpacePair.rhs.collection, parameters.getAssociatedEntityTypeInfo().getType(),
parameters.getAssociatedEntityTypeInfo().getType(), false, null, null);
String onRks = "rks." + n1qlR.filter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package org.springframework.data.couchbase.core.query;

import org.springframework.data.couchbase.core.ReactiveCouchbaseTemplate;
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;

import com.couchbase.client.java.json.JsonObject;
import com.couchbase.client.java.query.QueryOptions;
Expand Down Expand Up @@ -48,8 +48,9 @@ public JsonObject n1ql() {
}

@Override
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
Class domainClass, Class returnClass, boolean isCount, String[] distinctFields, String[] fields) {
public String toN1qlSelectString(CouchbaseConverter template, String bucketName, String scopeName,
String collectionName, Class domainClass, Class returnClass, boolean isCount, String[] distinctFields,
String[] fields) {
return expression.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -343,53 +343,54 @@ public String export(int[]... paramIndexPtrHolder) { // used only by tests
*/
@Deprecated
public String toN1qlSelectString(ReactiveCouchbaseTemplate template, Class domainClass, boolean isCount) {
return toN1qlSelectString(template, null, null, domainClass, null, isCount, null, null);
return toN1qlSelectString(template.getConverter(), template.getBucketName(), null, null, domainClass, null, isCount,
null, null);
}

public String toN1qlSelectString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
Class domainClass, Class returnClass, boolean isCount, String[] distinctFields, String[] fields) {
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(template, scopeName, collectionName, domainClass,
returnClass, isCount, distinctFields, fields);
public String toN1qlSelectString(CouchbaseConverter converter, String bucketName, String scopeName,
String collectionName, Class domainClass, Class returnClass, boolean isCount, String[] distinctFields,
String[] fields) {
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(converter, bucketName, scopeName, collectionName,
domainClass, returnClass, isCount, distinctFields, fields);
final StringBuilder statement = new StringBuilder();
appendString(statement, n1ql.selectEntity); // select ...
appendWhereString(statement, n1ql.filter); // typeKey = typeValue
appendWhere(statement, new int[] { 0 }, template.getConverter()); // criteria on this Query
appendWhere(statement, new int[] { 0 }, converter); // criteria on this Query
if (!isCount) {
appendSort(statement);
appendSkipAndLimit(statement);
}
return statement.toString();
}

public String toN1qlRemoveString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
Class domainClass) {
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(template, scopeName, collectionName, domainClass,
null, false, null, null);
public String toN1qlRemoveString(CouchbaseConverter converter, String bucketName, String scopeName,
String collectionName, Class domainClass) {
StringBasedN1qlQueryParser.N1qlSpelValues n1ql = getN1qlSpelValues(converter, bucketName, scopeName, collectionName,
domainClass, null, false, null, null);
final StringBuilder statement = new StringBuilder();
appendString(statement, n1ql.delete); // delete ...
appendWhereString(statement, n1ql.filter); // typeKey = typeValue
appendWhere(statement, null, template.getConverter()); // criteria on this Query
appendWhere(statement, null, converter); // criteria on this Query
appendString(statement, n1ql.returning);
return statement.toString();
}

public static StringBasedN1qlQueryParser.N1qlSpelValues getN1qlSpelValues(ReactiveCouchbaseTemplate template,
String scopeName, String collectionName, Class domainClass, Class returnClass, boolean isCount,
public static StringBasedN1qlQueryParser.N1qlSpelValues getN1qlSpelValues(CouchbaseConverter converter,
String bucketName, String scopeName, String collectionName, Class domainClass, Class returnClass, boolean isCount,
String[] distinctFields, String[] fields) {
String typeKey = template.getConverter().getTypeKey();
final CouchbasePersistentEntity<?> persistentEntity = template.getConverter().getMappingContext()
String typeKey = converter.getTypeKey();
final CouchbasePersistentEntity<?> persistentEntity = converter.getMappingContext()
.getRequiredPersistentEntity(domainClass);
MappingCouchbaseEntityInformation<?, Object> info = new MappingCouchbaseEntityInformation<>(persistentEntity);
String typeValue = info.getJavaType().getName();
TypeInformation<?> typeInfo = ClassTypeInformation.from(info.getJavaType());
Alias alias = template.getConverter().getTypeAlias(typeInfo);
Alias alias = converter.getTypeAlias(typeInfo);
if (alias != null && alias.isPresent()) {
typeValue = alias.toString();
}

StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(template.getBucketName(), scopeName,
collectionName, template.getConverter(), domainClass, returnClass, typeKey, typeValue, isCount, distinctFields,
fields);
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(bucketName, scopeName, collectionName, converter,
domainClass, returnClass, typeKey, typeValue, isCount, distinctFields, fields);
return sbnqp.getStatementContext();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import java.util.Locale;

import org.springframework.data.couchbase.core.ReactiveCouchbaseTemplate;
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentEntity;
import org.springframework.data.couchbase.core.support.TemplateUtils;
import org.springframework.data.couchbase.repository.query.CouchbaseQueryMethod;
Expand Down Expand Up @@ -66,10 +66,10 @@ public StringQuery(CouchbaseQueryMethod queryMethod, String n1qlString,
}

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

StringBasedN1qlQueryParser parser = getStringN1qlQueryParser(template, scope, collection, domainClass,
StringBasedN1qlQueryParser parser = getStringN1qlQueryParser(converter, bucketName, scope, collection, domainClass,
distinctFields, fields);

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

private StringBasedN1qlQueryParser getStringN1qlQueryParser(ReactiveCouchbaseTemplate template, String scopeName,
String collectionName, Class domainClass, String[] distinctFields, String[] fields) {
String typeKey = template.getConverter().getTypeKey();
final CouchbasePersistentEntity<?> persistentEntity = template.getConverter().getMappingContext()
private StringBasedN1qlQueryParser getStringN1qlQueryParser(CouchbaseConverter converter, String bucketName,
String scopeName, String collectionName, Class domainClass, String[] distinctFields, String[] fields) {
String typeKey = converter.getTypeKey();
final CouchbasePersistentEntity<?> persistentEntity = converter.getMappingContext()
.getRequiredPersistentEntity(domainClass);
MappingCouchbaseEntityInformation<?, Object> info = new MappingCouchbaseEntityInformation<>(persistentEntity);
String typeValue = info.getJavaType().getName();
TypeInformation<?> typeInfo = ClassTypeInformation.from(info.getJavaType());
Alias alias = template.getConverter().getTypeAlias(typeInfo);
Alias alias = converter.getTypeAlias(typeInfo);
if (alias != null && alias.isPresent()) {
typeValue = alias.toString();
}
// there are no options for distinct and fields for @Query
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(inlineN1qlQuery, queryMethod,
template.getBucketName(), scopeName, collectionName, template.getConverter(), typeKey, typeValue,
parameterAccessor, new SpelExpressionParser(), evaluationContextProvider);
StringBasedN1qlQueryParser sbnqp = new StringBasedN1qlQueryParser(inlineN1qlQuery, queryMethod, bucketName,
scopeName, collectionName, converter, typeKey, typeValue, parameterAccessor, new SpelExpressionParser(),
evaluationContextProvider);

return sbnqp;
}
Expand All @@ -139,8 +139,9 @@ private StringBasedN1qlQueryParser getStringN1qlQueryParser(ReactiveCouchbaseTem
* @param domainClass
*/
@Override
public String toN1qlRemoveString(ReactiveCouchbaseTemplate template, String scopeName, String collectionName,
Class domainClass) {
return toN1qlSelectString(template, scopeName, collectionName, domainClass, domainClass, false, null, null);
public String toN1qlRemoveString(CouchbaseConverter converter, String bucketName, String scopeName,
String collectionName, Class domainClass) {
return toN1qlSelectString(converter, bucketName, scopeName, collectionName, domainClass, domainClass, false, null,
null);
}
}
Loading