diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_3_0/2205-fix-searchbuilder-on-oracle.yaml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_3_0/2205-fix-searchbuilder-on-oracle.yaml new file mode 100644 index 00000000000..556c5edcada --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_3_0/2205-fix-searchbuilder-on-oracle.yaml @@ -0,0 +1,4 @@ +--- +type: fix +issue: 2205 +title: "The new JPA SearchBuilder failed to perform FHIR Searches on Oracle DB with an invalid SQL error. This has been corrected." diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/builder/sql/SearchQueryBuilder.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/builder/sql/SearchQueryBuilder.java index eeb47f4c481..b7c6ea2ab76 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/builder/sql/SearchQueryBuilder.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/builder/sql/SearchQueryBuilder.java @@ -354,12 +354,7 @@ public class SearchQueryBuilder { if (maxResultsToFetch != null || offset != null) { maxResultsToFetch = defaultIfNull(maxResultsToFetch, 10000); - - sql = "SELECT " + - myFirstPredicateBuilder.getResourceIdColumn().getColumnNameSQL() + - " FROM ( " + sql + " ) " + - " AS " + myFirstPredicateBuilder.getResourceIdColumn().getColumnNameSQL(); - + LimitHandler limitHandler = myDialect.getLimitHandler(); RowSelection selection = new RowSelection(); selection.setFirstRow(offset); diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java index 47ec9548efe..15d6533f1f3 100644 --- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java +++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java @@ -3650,6 +3650,8 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { p2.addName().setFamily(methodName + "2"); IIdType pid2 = myClient.create().resource(p2).execute().getId().toUnqualifiedVersionless(); + myCaptureQueriesListener.clear(); + HttpGet get = new HttpGet(ourServerBase + "/Patient?_lastUpdated=lt" + new InstantType(new Date(time1)).getValueAsString()); CloseableHttpResponse response = ourHttpClient.execute(get); try { @@ -3664,6 +3666,8 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test { response.close(); } + myCaptureQueriesListener.logSelectQueries(); + get = new HttpGet(ourServerBase + "/Patient?_lastUpdated=gt" + new InstantType(new Date(time1)).getValueAsString()); response = ourHttpClient.execute(get); try {