|
69 | 69 | import ca.uhn.fhir.test.utilities.server.RestfulServerExtension; |
70 | 70 | import ca.uhn.fhir.util.BundleBuilder; |
71 | 71 | import jakarta.annotation.Nonnull; |
| 72 | +import org.assertj.core.api.Condition; |
| 73 | +import org.assertj.core.data.Index; |
72 | 74 | import org.hl7.fhir.instance.model.api.IAnyResource; |
73 | 75 | import org.hl7.fhir.instance.model.api.IBaseResource; |
74 | 76 | import org.hl7.fhir.instance.model.api.IIdType; |
@@ -198,22 +200,25 @@ public class FhirResourceDaoR4QueryCountTest extends BaseResourceProviderR4Test |
198 | 200 | @AfterEach |
199 | 201 | public void afterResetDao() { |
200 | 202 | mySubscriptionSettings.clearSupportedSubscriptionTypesForUnitTest(); |
201 | | - myStorageSettings.setAllowMultipleDelete(new JpaStorageSettings().isAllowMultipleDelete()); |
202 | | - myStorageSettings.setAutoCreatePlaceholderReferenceTargets(new JpaStorageSettings().isAutoCreatePlaceholderReferenceTargets()); |
203 | | - myStorageSettings.setAutoVersionReferenceAtPaths(new JpaStorageSettings().getAutoVersionReferenceAtPaths()); |
204 | | - myStorageSettings.setDeleteEnabled(new JpaStorageSettings().isDeleteEnabled()); |
205 | | - myStorageSettings.setHistoryCountMode(JpaStorageSettings.DEFAULT_HISTORY_COUNT_MODE); |
206 | | - myStorageSettings.setIndexMissingFields(new JpaStorageSettings().getIndexMissingFields()); |
207 | | - myStorageSettings.setMassIngestionMode(new JpaStorageSettings().isMassIngestionMode()); |
208 | | - myStorageSettings.setMatchUrlCacheEnabled(new JpaStorageSettings().isMatchUrlCacheEnabled()); |
209 | | - myStorageSettings.setPopulateIdentifierInAutoCreatedPlaceholderReferenceTargets(new JpaStorageSettings().isPopulateIdentifierInAutoCreatedPlaceholderReferenceTargets()); |
210 | | - myStorageSettings.setResourceClientIdStrategy(new JpaStorageSettings().getResourceClientIdStrategy()); |
211 | | - myStorageSettings.setResourceMetaCountHardLimit(new JpaStorageSettings().getResourceMetaCountHardLimit()); |
212 | | - myStorageSettings.setRespectVersionsForSearchIncludes(new JpaStorageSettings().isRespectVersionsForSearchIncludes()); |
213 | | - myStorageSettings.setTagStorageMode(new JpaStorageSettings().getTagStorageMode()); |
| 203 | + |
| 204 | + JpaStorageSettings defaultStorageSettings = new JpaStorageSettings(); |
| 205 | + myStorageSettings.setAllowMultipleDelete(defaultStorageSettings.isAllowMultipleDelete()); |
| 206 | + myStorageSettings.setAutoCreatePlaceholderReferenceTargets(defaultStorageSettings.isAutoCreatePlaceholderReferenceTargets()); |
| 207 | + myStorageSettings.setAutoVersionReferenceAtPaths(defaultStorageSettings.getAutoVersionReferenceAtPaths()); |
| 208 | + myStorageSettings.setDeleteEnabled(defaultStorageSettings.isDeleteEnabled()); |
| 209 | + myStorageSettings.setHistoryCountMode(defaultStorageSettings.getHistoryCountMode()); |
| 210 | + myStorageSettings.setIndexMissingFields(defaultStorageSettings.getIndexMissingFields()); |
| 211 | + myStorageSettings.setMassIngestionMode(defaultStorageSettings.isMassIngestionMode()); |
| 212 | + myStorageSettings.setMatchUrlCacheEnabled(defaultStorageSettings.isMatchUrlCacheEnabled()); |
| 213 | + myStorageSettings.setPopulateIdentifierInAutoCreatedPlaceholderReferenceTargets(defaultStorageSettings.isPopulateIdentifierInAutoCreatedPlaceholderReferenceTargets()); |
| 214 | + myStorageSettings.setResourceClientIdStrategy(defaultStorageSettings.getResourceClientIdStrategy()); |
| 215 | + myStorageSettings.setResourceMetaCountHardLimit(defaultStorageSettings.getResourceMetaCountHardLimit()); |
| 216 | + myStorageSettings.setRespectVersionsForSearchIncludes(defaultStorageSettings.isRespectVersionsForSearchIncludes()); |
| 217 | + myStorageSettings.setTagStorageMode(defaultStorageSettings.getTagStorageMode()); |
214 | 218 | myStorageSettings.setExpungeEnabled(false); |
215 | | - myStorageSettings.setUniqueIndexesEnabled(new JpaStorageSettings().isUniqueIndexesEnabled()); |
216 | | - myStorageSettings.setUniqueIndexesCheckedBeforeSave(new JpaStorageSettings().isUniqueIndexesCheckedBeforeSave()); |
| 219 | + myStorageSettings.setUniqueIndexesEnabled(defaultStorageSettings.isUniqueIndexesEnabled()); |
| 220 | + myStorageSettings.setUniqueIndexesCheckedBeforeSave(defaultStorageSettings.isUniqueIndexesCheckedBeforeSave()); |
| 221 | + myStorageSettings.setFetchSizeDefaultMaximum(defaultStorageSettings.getFetchSizeDefaultMaximum()); |
217 | 222 |
|
218 | 223 | myFhirContext.getParserOptions().setStripVersionsFromReferences(true); |
219 | 224 | TermReadSvcImpl.setForceDisableHibernateSearchForUnitTest(false); |
@@ -4613,6 +4618,27 @@ public void testTransactionWithMultiplePreExistingInlineMatchUrls(boolean theMat |
4613 | 4618 | assertEquals(0, myCaptureQueriesListener.countDeleteQueriesForCurrentThread()); |
4614 | 4619 | } |
4615 | 4620 |
|
| 4621 | + @Test |
| 4622 | + void testStreamingQueryDoesNotUseLimit() { |
| 4623 | + // given |
| 4624 | + myCaptureQueriesListener.clear(); |
| 4625 | + myStorageSettings.setFetchSizeDefaultMaximum(100); |
| 4626 | + |
| 4627 | + // when |
| 4628 | + Long count = this.runInTransaction(() -> |
| 4629 | + myPatientDao.searchForIdStream(new SearchParameterMap().setLoadSynchronous(true), mySrd, null) |
| 4630 | + .count()); |
| 4631 | + |
| 4632 | + // then |
| 4633 | + assertEquals(0, count); |
| 4634 | + myCaptureQueriesListener.logSelectQueries(); |
| 4635 | + List<SqlQuery> selectQueries = myCaptureQueriesListener.getSelectQueriesForCurrentThread(); |
| 4636 | + Condition<SqlQuery> queryNotContainLimit = new Condition<>(query -> !query.getSql(false, false).matches(".*first .* rows.*"), "query does not have limit"); |
| 4637 | + assertThat(selectQueries) |
| 4638 | + .hasSize(1) |
| 4639 | + .has(queryNotContainLimit, Index.atIndex(0)); |
| 4640 | + } |
| 4641 | + |
4616 | 4642 |
|
4617 | 4643 | private void assertQueryCount(int theExpectedSelectCount, int theExpectedUpdateCount, int theExpectedInsertCount, int theExpectedDeleteCount) { |
4618 | 4644 |
|
|
0 commit comments