From 5cb9eca4437250dfb0439d52a7ec3958e25d4146 Mon Sep 17 00:00:00 2001 From: Subhashni Balakrishnan Date: Wed, 7 Nov 2018 16:24:01 -0800 Subject: [PATCH] DATACOUCH-384 - Apply converters to string based query parameters Apply the converters registered to serialize the positional and named parameters to match the database representation Original Pull Request: #172. --- .../N1qlCouchbaseRepositoryTests.java | 18 ++++++++++++++++-- .../couchbase/repository/PartyRepository.java | 3 +++ .../repository/query/StringN1qlBasedQuery.java | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/integration/java/org/springframework/data/couchbase/repository/N1qlCouchbaseRepositoryTests.java b/src/integration/java/org/springframework/data/couchbase/repository/N1qlCouchbaseRepositoryTests.java index 61d3ee31..2df7ffeb 100644 --- a/src/integration/java/org/springframework/data/couchbase/repository/N1qlCouchbaseRepositoryTests.java +++ b/src/integration/java/org/springframework/data/couchbase/repository/N1qlCouchbaseRepositoryTests.java @@ -38,6 +38,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.Calendar; +import java.util.Date; import java.util.List; /** @@ -125,7 +127,7 @@ public class N1qlCouchbaseRepositoryTests { Pageable pageable = new PageRequest(0, 8); Page page1 = repository.findAll(pageable); - assertEquals(16, page1.getTotalElements()); //12 generated parties + 4 specifically crafted party + assertEquals(17, page1.getTotalElements()); //12 generated parties + 5 specifically crafted party assertEquals(8, page1.getNumberOfElements()); } @@ -134,7 +136,7 @@ public class N1qlCouchbaseRepositoryTests { Pageable pageable = new PageRequest(0, 8, Sort.Direction.DESC, "attendees"); Page page1 = repository.findAll(pageable); - assertEquals(16, page1.getTotalElements()); //12 generated parties + 4 specifically crafted party + assertEquals(17, page1.getTotalElements()); //12 generated parties + 5 specifically crafted party assertEquals(8, page1.getNumberOfElements()); List parties = page1.getContent(); @@ -160,4 +162,16 @@ public class N1qlCouchbaseRepositoryTests { assertTrue(partyList.size() == 1); } + @Test + public void testSpelDateConvertion() { + final String key = "testSpelDateConvertion"; + Calendar cal = Calendar.getInstance(); + cal.clear(); + cal.set(2018, Calendar.SEPTEMBER, 10); + Date date = cal.getTime(); + partyRepository.save(new Party(key, "", "", date, 0, null)); + List partyList = partyRepository.getByEventDate(date); + assertTrue(partyList.size() == 1); + assertEquals("Key mismatch", partyList.get(0).getKey(), key); + } } diff --git a/src/integration/java/org/springframework/data/couchbase/repository/PartyRepository.java b/src/integration/java/org/springframework/data/couchbase/repository/PartyRepository.java index 01adf8a5..c629dcf4 100644 --- a/src/integration/java/org/springframework/data/couchbase/repository/PartyRepository.java +++ b/src/integration/java/org/springframework/data/couchbase/repository/PartyRepository.java @@ -78,4 +78,7 @@ public interface PartyRepository extends CouchbaseRepository { List findByDescriptionOrName(String description, String name); List removeByDescriptionOrName(String description, String name); + + @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and eventDate = $1") + List getByEventDate(Date eventDate); } diff --git a/src/main/java/org/springframework/data/couchbase/repository/query/StringN1qlBasedQuery.java b/src/main/java/org/springframework/data/couchbase/repository/query/StringN1qlBasedQuery.java index fec14bde..c3a34159 100644 --- a/src/main/java/org/springframework/data/couchbase/repository/query/StringN1qlBasedQuery.java +++ b/src/main/java/org/springframework/data/couchbase/repository/query/StringN1qlBasedQuery.java @@ -266,7 +266,7 @@ public class StringN1qlBasedQuery extends AbstractN1qlBasedQuery { private JsonValue getPositionalPlaceholderValues(ParameterAccessor accessor) { JsonArray posValues = JsonArray.create(); for (Parameter parameter : getQueryMethod().getParameters().getBindableParameters()) { - posValues.add(accessor.getBindableValue(parameter.getIndex())); + posValues.add(getCouchbaseOperations().getConverter().convertForWriteIfNeeded(accessor.getBindableValue(parameter.getIndex()))); } return posValues; } @@ -276,7 +276,7 @@ public class StringN1qlBasedQuery extends AbstractN1qlBasedQuery { for (Parameter parameter : getQueryMethod().getParameters().getBindableParameters()) { String placeholder = parameter.getPlaceholder(); - Object value = accessor.getBindableValue(parameter.getIndex()); + Object value = getCouchbaseOperations().getConverter().convertForWriteIfNeeded(accessor.getBindableValue(parameter.getIndex())); if (placeholder != null && placeholder.charAt(0) == ':') { placeholder = placeholder.replaceFirst(":", "");