From e5e19693a51e9a90057c1adbb01cf4ca4c677e6f Mon Sep 17 00:00:00 2001 From: mikereiche Date: Wed, 24 Mar 2021 15:07:25 -0400 Subject: [PATCH] Add QueryCriteria arrayContaining. Add QueryCriteria arrayContaining which maps to n1ql array_containing. Closes #1073. Original pull request #1109. --- .../data/couchbase/core/query/QueryCriteria.java | 7 +++++++ .../data/couchbase/core/query/QueryCriteriaTests.java | 11 +++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/springframework/data/couchbase/core/query/QueryCriteria.java b/src/main/java/org/springframework/data/couchbase/core/query/QueryCriteria.java index 7f1305812..4b7da2459 100644 --- a/src/main/java/org/springframework/data/couchbase/core/query/QueryCriteria.java +++ b/src/main/java/org/springframework/data/couchbase/core/query/QueryCriteria.java @@ -192,6 +192,13 @@ public QueryCriteria containing(@Nullable Object o) { return this; } + public QueryCriteria arrayContaining(@Nullable Object o) { + operator = "ARRAY_CONTAINING"; + value = new Object[] { o }; + format = "array_containing(%1$s, %3$s)"; + return this; + } + public QueryCriteria notContaining(@Nullable Object o) { value = new QueryCriteria[] { wrap(containing(o)) }; operator = "NOT"; 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 ca1e06afd..cc563e015 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 @@ -123,14 +123,11 @@ void testStartingWith() { assertEquals("`name` like (\"Cou\"||\"%\")", c.export()); } - /* cannot do this properly yet because in arg to when() in - * startingWith() cannot be a QueryCriteria @Test void testStartingWithExpr() { QueryCriteria c = where(i("name")).startingWith(where(i("name")).plus("xxx")); - assertEquals("`name` like (((`name` || "xxx") || ""%""))", c.export()); + assertEquals("`name` like (((`name` || \"xxx\"))||\"%\")", c.export()); } - */ @Test void testEndingWith() { @@ -162,6 +159,12 @@ void testNotContaining() { assertEquals("not( (contains(`name`, \"Elvis\")) )", c.export()); } + @Test + void testArrayContaining() { + QueryCriteria c = where(i("name")).arrayContaining("Elvis"); + assertEquals("array_containing(`name`, \"Elvis\")", c.export()); + } + @Test void testLike() { QueryCriteria c = where(i("name")).like("%ouch%");