Skip to content

Commit 2d862b4

Browse files
authored
Handle arguments that are lists. (#1606)
Closes #1586.
1 parent 8974ce0 commit 2d862b4

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ public CouchbaseList writeCollectionInternal(final Collection<?> source, final C
772772
type, prop, accessor));
773773
} else {
774774
CouchbaseDocument embeddedDoc = new CouchbaseDocument();
775-
writeInternalRoot(element, embeddedDoc, prop.getTypeInformation(), false, prop);
775+
writeInternalRoot(element, embeddedDoc, prop != null ? prop.getTypeInformation() : TypeInformation.of(elementType), false, prop);
776776
target.put(embeddedDoc);
777777
}
778778

src/main/java/org/springframework/data/couchbase/repository/query/StringBasedN1qlQueryParser.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,9 @@ private JsonObject getNamedPlaceholderValues(ParameterAccessor accessor) {
463463
if (value instanceof CouchbaseDocument) {
464464
value = ((CouchbaseDocument) value).export();
465465
}
466+
if (value instanceof CouchbaseList) {
467+
value = ((CouchbaseList) value).export();
468+
}
466469
if (placeholder != null && placeholder.charAt(0) == ':') {
467470
placeholder = placeholder.replaceFirst(":", "");
468471
putNamedValue(namedValues, placeholder, value);

src/test/java/org/springframework/data/couchbase/domain/UserSubmissionRepository.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,11 @@ public interface UserSubmissionRepository extends CouchbaseRepository<UserSubmis
4040
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
4141
List<Airport> setByIdAddress(String id, Address abc);
4242

43+
@Query("UPDATE #{#n1ql.bucket} set courses=$2 where meta().id=$1")
44+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
45+
void setOrderedCourses(String id, Course[] courses);
46+
47+
@Query("UPDATE #{#n1ql.bucket} set courses=$courses where meta().id=$id")
48+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
49+
void setNamedCourses(String id, Course[] courses);
4350
}

src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.springframework.data.couchbase.domain.AirportMini;
7373
import org.springframework.data.couchbase.domain.AirportRepository;
7474
import org.springframework.data.couchbase.domain.AirportRepositoryScanConsistencyTest;
75+
import org.springframework.data.couchbase.domain.Course;
7576
import org.springframework.data.couchbase.domain.Iata;
7677
import org.springframework.data.couchbase.domain.NaiveAuditorAware;
7778
import org.springframework.data.couchbase.domain.Person;
@@ -855,7 +856,45 @@ void updateObject() throws Exception {
855856
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
856857
assertEquals(address, fetched.get().getAddress());
857858
} finally {
858-
airportRepository.deleteById(userSubmission.getId());
859+
userSubmissionRepository.deleteById(userSubmission.getId());
860+
}
861+
}
862+
863+
@Test
864+
void namedParameterList() throws Exception {
865+
UserSubmission userSubmission = new UserSubmission();
866+
userSubmission.setId("123");
867+
try {
868+
userSubmission.setUsername("updateObject");
869+
userSubmissionRepository.save(userSubmission);
870+
Course[] courses = new Course[]{ new Course("1", "2", "3"), new Course("4","5","6")};
871+
userSubmissionRepository.setNamedCourses(userSubmission.getId(), courses);
872+
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
873+
assertEquals(courses.length, fetched.get().getCourses().size());
874+
for(int i=0; i< courses.length; i++){
875+
assertEquals(courses[i], fetched.get().getCourses().get(i));
876+
}
877+
} finally {
878+
userSubmissionRepository.deleteById(userSubmission.getId());
879+
}
880+
}
881+
882+
@Test
883+
void orderedParameterList() throws Exception {
884+
UserSubmission userSubmission = new UserSubmission();
885+
userSubmission.setId("123");
886+
try {
887+
userSubmission.setUsername("updateObject");
888+
userSubmissionRepository.save(userSubmission);
889+
Course[] courses = new Course[]{ new Course("1", "2", "3"), new Course("4","5","6")};
890+
userSubmissionRepository.setOrderedCourses(userSubmission.getId(), courses);
891+
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
892+
assertEquals(courses.length, fetched.get().getCourses().size());
893+
for(int i=0; i< courses.length; i++){
894+
assertEquals(courses[i], fetched.get().getCourses().get(i));
895+
}
896+
} finally {
897+
userSubmissionRepository.deleteById(userSubmission.getId());
859898
}
860899
}
861900

0 commit comments

Comments
 (0)