diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java index c125e211fa8a..6b625a8c4016 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java @@ -33,6 +33,7 @@ import static org.hisp.dhis.analytics.table.ColumnRegex.NUMERIC_REGEXP; import static org.hisp.dhis.analytics.table.model.AnalyticsValueType.FACT; import static org.hisp.dhis.analytics.table.util.PartitionUtils.getLatestTablePartition; +import static org.hisp.dhis.commons.util.TextUtils.SPACE; import static org.hisp.dhis.commons.util.TextUtils.emptyIfTrue; import static org.hisp.dhis.commons.util.TextUtils.format; import static org.hisp.dhis.commons.util.TextUtils.replace; @@ -413,8 +414,21 @@ where des.valuetype in (${valTypes}) \ "startTime", toLongDate(params.getStartTime()), "deletedClause", sqlBuilder.isFalse("dv", "deleted")))); + sql.append(getStartEndDatesCondition(respectStartEndDates)); + + if (whereClause != null) { + sql.append(" and " + whereClause + " "); + } + + invokeTimeAndLog(sql.toString(), "Populating table: '{}' {}", tableName, valueTypes); + } + + String getStartEndDatesCondition(boolean respectStartEndDates) { + StringBuilder condition = new StringBuilder(""); + if (respectStartEndDates) { - sql.append( + condition.append(SPACE); + condition.append( """ and (aon.startdate is null or aon.startdate <= ps.startdate) \ and (aon.enddate is null or aon.enddate >= ps.enddate) \ @@ -422,11 +436,7 @@ where des.valuetype in (${valTypes}) \ and (con.enddate is null or con.enddate >= ps.enddate)\s"""); } - if (whereClause != null) { - sql.append(" and " + whereClause + " "); - } - - invokeTimeAndLog(sql.toString(), "Populating table: '{}' {}", tableName, valueTypes); + return condition.toString(); } /** diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManagerTest.java b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManagerTest.java index 73e3594ce83a..9e7022310584 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManagerTest.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/test/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManagerTest.java @@ -372,4 +372,10 @@ void testGetApprovalJoinClause() { assertEquals(expected, subject.getApprovalJoinClause()); } + + @Test + void testGetStartEndDatesCondition() { + assertTrue(subject.getStartEndDatesCondition(false).isEmpty()); + assertTrue(subject.getStartEndDatesCondition(true).startsWith(" ")); + } }