------------------------------------------------------------ revno: 19326 committer: Lars Helge Overland <larshe...@gmail.com> branch nick: dhis2 timestamp: Tue 2015-06-09 21:59:15 +0200 message: DataValueSetStore, performance improvement for gettin data values, using start/end dates directly in SQL modified: dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DataExportParams.java dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/SpringDataValueSetStore.java
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DataExportParams.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DataExportParams.java 2015-06-09 08:37:13 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DataExportParams.java 2015-06-09 19:59:15 +0000 @@ -48,6 +48,10 @@ private Set<Period> periods = new HashSet<>(); + private Date startDate; + + private Date endDate; + private Set<OrganisationUnit> organisationUnits = new HashSet<>(); private boolean includeChildren; @@ -80,6 +84,11 @@ return periods != null && !periods.isEmpty() ? periods.iterator().next() : null; } + public boolean hasStartEndDate() + { + return startDate != null && endDate != null; + } + public OrganisationUnit getFirstOrganisationUnit() { return organisationUnits != null && !organisationUnits.isEmpty() ? organisationUnits.iterator().next() : null; @@ -139,6 +148,26 @@ this.periods = periods; } + public Date getStartDate() + { + return startDate; + } + + public void setStartDate( Date startDate ) + { + this.startDate = startDate; + } + + public Date getEndDate() + { + return endDate; + } + + public void setEndDate( Date endDate ) + { + this.endDate = endDate; + } + public Set<OrganisationUnit> getOrganisationUnits() { return organisationUnits; === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java 2015-06-09 08:37:13 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java 2015-06-09 19:59:15 +0000 @@ -174,8 +174,8 @@ } else if ( startDate != null && endDate != null ) { - List<Period> pes = new ArrayList<Period>( periodService.getPeriodsBetweenDates( startDate, endDate ) ); - params.getPeriods().addAll( periodService.reloadPeriods( pes ) ); + params.setStartDate( startDate ); + params.setEndDate( endDate ); } if ( organisationUnits != null ) @@ -212,11 +212,16 @@ violation = "At least one valid data set must be specified"; } - if ( params.getPeriods().isEmpty() ) + if ( params.getPeriods().isEmpty() && !params.hasStartEndDate() ) { violation = "At least one valid period or start/end dates must be specified"; } + if ( params.hasStartEndDate() && params.getStartDate().after( params.getEndDate() ) ) + { + violation = "Start date must be before end date"; + } + if ( params.getOrganisationUnits().isEmpty() ) { violation = "At least one valid organisation unit must be specified"; === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/SpringDataValueSetStore.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/SpringDataValueSetStore.java 2015-06-09 08:37:13 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/SpringDataValueSetStore.java 2015-06-09 19:59:15 +0000 @@ -30,6 +30,7 @@ import static org.hisp.dhis.common.IdentifiableObjectUtils.getIdentifiers; import static org.hisp.dhis.system.util.DateUtils.getLongGmtDateString; +import static org.hisp.dhis.system.util.DateUtils.getMediumDateString; import static org.hisp.dhis.util.TextUtils.getCommaDelimitedString; import java.io.OutputStream; @@ -41,6 +42,8 @@ import java.util.Set; import org.amplecode.staxwax.factory.XMLFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hisp.dhis.calendar.Calendar; import org.hisp.dhis.dataelement.DataElement; import org.hisp.dhis.dataset.DataSet; @@ -61,6 +64,8 @@ public class SpringDataValueSetStore implements DataValueSetStore { + private static final Log log = LogFactory.getLog( SpringDataValueSetStore.class ); + private static final char CSV_DELIM = ','; @Autowired @@ -187,9 +192,17 @@ "join categoryoptioncombo coc on (dv.categoryoptioncomboid=coc.categoryoptioncomboid) " + "join categoryoptioncombo aoc on (dv.attributeoptioncomboid=aoc.categoryoptioncomboid) " + "where de.dataelementid in (" + getCommaDelimitedString( getIdentifiers( getDataElements( params.getDataSets() ) ) ) + ") " + - "and dv.periodid in (" + getCommaDelimitedString( getIdentifiers( params.getPeriods() ) ) + ") " + "and dv.sourceid in (" + getCommaDelimitedString( getIdentifiers( params.getOrganisationUnits() ) ) + ") "; + if ( params.hasStartEndDate() ) + { + sql += "and (pe.startdate >= '" + getMediumDateString( params.getStartDate() ) + "' and pe.enddate <= '" + getMediumDateString( params.getEndDate() ) + "') "; + } + else + { + sql += "and dv.periodid in (" + getCommaDelimitedString( getIdentifiers( params.getPeriods() ) ) + ") "; + } + if ( params.hasLastUpdated() ) { sql += "and dv.lastupdated >= '" + getLongGmtDateString( params.getLastUpdated() ) + "' "; @@ -200,6 +213,8 @@ sql += "limit " + params.getLimit(); } + log.debug( "Get data value set SQL: " + sql ); + return sql; }
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp