From 2e8d655751adf03fd15ba7cd6529666fb421cbe8 Mon Sep 17 00:00:00 2001 From: Michael Reiche <48999328+mikereiche@users.noreply.github.com> Date: Wed, 31 Mar 2021 06:10:42 -0700 Subject: [PATCH] Fix N1QLExpression keys. Fix syntax of N1QLExpression keys. Closes #1064. Co-authored-by: mikereiche --- .../data/couchbase/core/query/N1QLExpression.java | 5 +++-- .../data/couchbase/core/query/QueryCriteriaTests.java | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) 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 49f8be38..fd690c98 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 class N1QLExpression { 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 cc563e01..4cb57944 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 org.junit.jupiter.api.Test; import com.couchbase.client.java.json.JsonArray; +import java.util.Arrays; + /** * @author Mauro Monti */ @@ -251,6 +253,15 @@ class QueryCriteriaTests { 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";