diff --git a/src/main/java/org/springframework/data/couchbase/core/query/N1QLExpression.java b/src/main/java/org/springframework/data/couchbase/core/query/N1QLExpression.java index 49f8be381..fd690c988 100644 --- a/src/main/java/org/springframework/data/couchbase/core/query/N1QLExpression.java +++ b/src/main/java/org/springframework/data/couchbase/core/query/N1QLExpression.java @@ -262,13 +262,14 @@ public N1QLExpression returning(N1QLExpression right) { public N1QLExpression keys(Iterable ids) { StringBuilder sb = new StringBuilder(); Iterator it = ids.iterator(); - // TODO: really? Lets do better. + sb.append("["); while (it.hasNext()) { - sb.append(i(it.next().toString())); + sb.append(s(it.next().toString())); if (it.hasNext()) { sb.append(","); } } + sb.append("]"); return infix("USE KEYS", toString(), sb.toString()); } diff --git a/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java b/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java index cc563e015..4cb579440 100644 --- a/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java @@ -28,6 +28,8 @@ import com.couchbase.client.java.json.JsonArray; +import java.util.Arrays; + /** * @author Mauro Monti */ @@ -251,6 +253,15 @@ void testFalse() { assertEquals("not( (`name`) )", c.export()); } + @Test + void testKeys() { + N1QLExpression expression = N1QLExpression.x(""); + assertEquals(" USE KEYS [\"a\",\"b\"]", expression.keys(Arrays.asList("a", "b")).toString()); + assertEquals(" USE KEYS [\"a\"]", expression.keys(Arrays.asList("a")).toString()); + assertEquals(" USE KEYS []", expression.keys(Arrays.asList()).toString()); + } + + @Test // https://github.com/spring-projects/spring-data-couchbase/issues/1066 void testCriteriaCorrectlyEscapedWhenUsingMetaOnLHS() { final String bucketName = "sample-bucket";