Fix a crash on _include which doesnt find any matches
This commit is contained in:
parent
8a4182012d
commit
584ba1eec4
|
@ -2000,6 +2000,9 @@ public class SearchBuilder implements ISearchBuilder {
|
|||
}
|
||||
|
||||
private static List<Long> filterResourceIdsByLastUpdated(EntityManager theEntityManager, final DateRangeParam theLastUpdated, Collection<Long> thePids) {
|
||||
if (thePids.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
CriteriaBuilder builder = theEntityManager.getCriteriaBuilder();
|
||||
CriteriaQuery<Long> cq = builder.createQuery(Long.class);
|
||||
Root<ResourceTable> from = cq.from(ResourceTable.class);
|
||||
|
|
|
@ -2558,6 +2558,59 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* https://chat.fhir.org/#narrow/stream/implementers/topic/Internal.20error.2C.20when.20executing.20the.20following.20query.20on.20HAPI
|
||||
*/
|
||||
@Test
|
||||
public void testSearchByLastUpdatedGe() throws Exception {
|
||||
Patient p2 = new Patient();
|
||||
p2.setId("P2");
|
||||
p2.addName().setFamily("P2");
|
||||
myClient.update().resource(p2).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
Practitioner pract = new Practitioner();
|
||||
pract.setId("PRAC");
|
||||
pract.addName().setFamily("PRACT");
|
||||
myClient.update().resource(pract).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
Encounter enc = new Encounter();
|
||||
enc.setId("E2");
|
||||
enc.setStatus(EncounterStatus.ARRIVED);
|
||||
enc.setPeriod(new Period().setStart(new Date()).setEnd(new Date()));
|
||||
enc.getSubject().setReference("Patient/P2");
|
||||
enc.addParticipant().getIndividual().setReference("Practitioner/PRAC");
|
||||
myClient.update().resource(enc).execute().getId().toUnqualifiedVersionless();
|
||||
|
||||
HttpGet get = new HttpGet(ourServerBase + "/Encounter?patient=P2&date=ge2017-01-01&_include:recurse=Encounter:practitioner&_lastUpdated=ge2017-11-10");
|
||||
CloseableHttpResponse response = ourHttpClient.execute(get);
|
||||
try {
|
||||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
String output = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
|
||||
IOUtils.closeQuietly(response.getEntity().getContent());
|
||||
ourLog.info(output);
|
||||
List<String> ids = toUnqualifiedVersionlessIdValues(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
|
||||
ourLog.info(ids.toString());
|
||||
assertThat(ids, containsInAnyOrder("Practitioner/PRAC", "Encounter/E2"));
|
||||
} finally {
|
||||
response.close();
|
||||
}
|
||||
|
||||
get = new HttpGet(ourServerBase + "/Encounter?patient=P2&date=ge2017-01-01&_include:recurse=Encounter:practitioner&_lastUpdated=ge2099-11-10");
|
||||
response = ourHttpClient.execute(get);
|
||||
try {
|
||||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
String output = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
|
||||
IOUtils.closeQuietly(response.getEntity().getContent());
|
||||
ourLog.info(output);
|
||||
List<String> ids = toUnqualifiedVersionlessIdValues(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
|
||||
ourLog.info(ids.toString());
|
||||
assertThat(ids, empty());
|
||||
} finally {
|
||||
response.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSearchByReferenceIds() {
|
||||
Organization o1 = new Organization();
|
||||
|
|
|
@ -6,6 +6,12 @@
|
|||
<title>HAPI FHIR Changelog</title>
|
||||
</properties>
|
||||
<body>
|
||||
<release version="3.2.0" date="TBD">
|
||||
<action type="fix">
|
||||
Fix a crash in JPA server when performing a recursive
|
||||
<![CDATA[<code>_include</code>]]> which doesn't actually find any matches.
|
||||
</action>
|
||||
</release>
|
||||
<release version="3.1.0" date="2017-11-23">
|
||||
<action type="add">
|
||||
The version of a few dependencies have been bumped to the
|
||||
|
|
Loading…
Reference in New Issue