Handle arguments that are lists. (#1606)

Closes #1586.
This commit is contained in:
Michael Reiche
2022-11-02 10:38:18 -10:00
committed by GitHub
parent 8974ce0aeb
commit 2d862b4899
4 changed files with 51 additions and 2 deletions

View File

@@ -772,7 +772,7 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter implem
type, prop, accessor));
} else {
CouchbaseDocument embeddedDoc = new CouchbaseDocument();
writeInternalRoot(element, embeddedDoc, prop.getTypeInformation(), false, prop);
writeInternalRoot(element, embeddedDoc, prop != null ? prop.getTypeInformation() : TypeInformation.of(elementType), false, prop);
target.put(embeddedDoc);
}

View File

@@ -463,6 +463,9 @@ public class StringBasedN1qlQueryParser {
if (value instanceof CouchbaseDocument) {
value = ((CouchbaseDocument) value).export();
}
if (value instanceof CouchbaseList) {
value = ((CouchbaseList) value).export();
}
if (placeholder != null && placeholder.charAt(0) == ':') {
placeholder = placeholder.replaceFirst(":", "");
putNamedValue(namedValues, placeholder, value);

View File

@@ -40,4 +40,11 @@ public interface UserSubmissionRepository extends CouchbaseRepository<UserSubmis
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
List<Airport> setByIdAddress(String id, Address abc);
@Query("UPDATE #{#n1ql.bucket} set courses=$2 where meta().id=$1")
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
void setOrderedCourses(String id, Course[] courses);
@Query("UPDATE #{#n1ql.bucket} set courses=$courses where meta().id=$id")
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
void setNamedCourses(String id, Course[] courses);
}

View File

@@ -72,6 +72,7 @@ import org.springframework.data.couchbase.domain.Airport;
import org.springframework.data.couchbase.domain.AirportMini;
import org.springframework.data.couchbase.domain.AirportRepository;
import org.springframework.data.couchbase.domain.AirportRepositoryScanConsistencyTest;
import org.springframework.data.couchbase.domain.Course;
import org.springframework.data.couchbase.domain.Iata;
import org.springframework.data.couchbase.domain.NaiveAuditorAware;
import org.springframework.data.couchbase.domain.Person;
@@ -855,7 +856,45 @@ public class CouchbaseRepositoryQueryIntegrationTests extends ClusterAwareIntegr
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
assertEquals(address, fetched.get().getAddress());
} finally {
airportRepository.deleteById(userSubmission.getId());
userSubmissionRepository.deleteById(userSubmission.getId());
}
}
@Test
void namedParameterList() throws Exception {
UserSubmission userSubmission = new UserSubmission();
userSubmission.setId("123");
try {
userSubmission.setUsername("updateObject");
userSubmissionRepository.save(userSubmission);
Course[] courses = new Course[]{ new Course("1", "2", "3"), new Course("4","5","6")};
userSubmissionRepository.setNamedCourses(userSubmission.getId(), courses);
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
assertEquals(courses.length, fetched.get().getCourses().size());
for(int i=0; i< courses.length; i++){
assertEquals(courses[i], fetched.get().getCourses().get(i));
}
} finally {
userSubmissionRepository.deleteById(userSubmission.getId());
}
}
@Test
void orderedParameterList() throws Exception {
UserSubmission userSubmission = new UserSubmission();
userSubmission.setId("123");
try {
userSubmission.setUsername("updateObject");
userSubmissionRepository.save(userSubmission);
Course[] courses = new Course[]{ new Course("1", "2", "3"), new Course("4","5","6")};
userSubmissionRepository.setOrderedCourses(userSubmission.getId(), courses);
Optional<UserSubmission> fetched = userSubmissionRepository.findById(userSubmission.getId());
assertEquals(courses.length, fetched.get().getCourses().size());
for(int i=0; i< courses.length; i++){
assertEquals(courses[i], fetched.get().getCourses().get(i));
}
} finally {
userSubmissionRepository.deleteById(userSubmission.getId());
}
}