dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #40134
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 20323: Data export, using org unit path param to improve performance
------------------------------------------------------------
revno: 20323
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2015-09-23 19:15:50 +0200
message:
Data export, using org unit path param to improve performance
modified:
dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java
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-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java'
--- dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java 2015-09-23 16:56:18 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java 2015-09-23 17:15:50 +0000
@@ -55,7 +55,7 @@
private String sqlA = "SELECT * FROM _categorystructure;; ; ;;; ;; ; ";
- private String sqlB = "SELECT COUNT(_ous.*) AS so_dem FROM _orgunitstructure AS _ous";
+ private String sqlB = "SELECT COUNT(*) from organisationunit;";
private String sqlC = "SELECT COUNT(_cocn.*) AS so_dem, _icgss.indicatorid AS in_id"
+ "FROM _indicatorgroupsetstructure AS _icgss, categoryoptioncombo AS _cocn "
=== 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-07-07 13:16:25 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DataExportParams.java 2015-09-23 17:15:50 +0000
@@ -63,15 +63,6 @@
private IdSchemes idSchemes;
// -------------------------------------------------------------------------
- // Transient properties
- // -------------------------------------------------------------------------
-
- /**
- * Organisation units originally part of the request, excluding children.
- */
- private transient Set<OrganisationUnit> requestOrganisationUnits = new HashSet<>();
-
- // -------------------------------------------------------------------------
// Constructors
// -------------------------------------------------------------------------
@@ -114,15 +105,6 @@
}
/**
- * Sets the request organisation units to the currently selected
- * organisation units.
- */
- public void setRequestOrganisationUnits()
- {
- this.requestOrganisationUnits.addAll( organisationUnits );
- }
-
- /**
* Indicates whether this parameters represents a single data value set, implying
* that it contains exactly one of data sets, periods and organisation units.
*/
@@ -235,14 +217,4 @@
{
this.idSchemes = idSchemes;
}
-
- public Set<OrganisationUnit> getRequestOrganisationUnits()
- {
- return requestOrganisationUnits;
- }
-
- public void setRequestOrganisationUnits( Set<OrganisationUnit> requestOrganisationUnits )
- {
- this.requestOrganisationUnits = requestOrganisationUnits;
- }
}
=== 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-09-03 03:11:47 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/DefaultDataValueSetService.java 2015-09-23 17:15:50 +0000
@@ -29,13 +29,17 @@
*/
import static org.apache.commons.lang3.StringUtils.trimToNull;
-import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids;
import static org.hisp.dhis.common.IdentifiableProperty.UUID;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_REQUIRE_ATTRIBUTE_OPTION_COMBO;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_REQUIRE_CATEGORY_OPTION_COMBO;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_STRICT_ATTRIBUTE_OPTION_COMBOS;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_STRICT_CATEGORY_OPTION_COMBOS;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_STRICT_ORGANISATION_UNITS;
+import static org.hisp.dhis.setting.SystemSettingManager.KEY_DATA_IMPORT_STRICT_PERIODS;
import static org.hisp.dhis.system.notification.NotificationLevel.ERROR;
import static org.hisp.dhis.system.notification.NotificationLevel.INFO;
import static org.hisp.dhis.system.util.DateUtils.getDefaultDate;
import static org.hisp.dhis.system.util.DateUtils.parseDate;
-import static org.hisp.dhis.setting.SystemSettingManager.*;
import java.io.InputStream;
import java.io.OutputStream;
@@ -43,7 +47,6 @@
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Date;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -189,13 +192,6 @@
if ( organisationUnits != null )
{
params.getOrganisationUnits().addAll( identifiableObjectManager.getByUid( OrganisationUnit.class, organisationUnits ) );
- params.setRequestOrganisationUnits();
-
- if ( includeChildren )
- {
- params.getOrganisationUnits().addAll( new HashSet<>(
- organisationUnitService.getOrganisationUnitsWithChildren( getUids( params.getOrganisationUnits() ) ) ) );
- }
}
params.setIncludeChildren( includeChildren );
@@ -231,7 +227,7 @@
violation = "Start date must be before end date";
}
- if ( params.getRequestOrganisationUnits().isEmpty() )
+ if ( params.getOrganisationUnits().isEmpty() )
{
violation = "At least one valid organisation unit must be specified";
}
@@ -252,7 +248,7 @@
@Override
public void decideAccess( DataExportParams params )
{
- for ( OrganisationUnit unit : params.getRequestOrganisationUnits() )
+ for ( OrganisationUnit unit : params.getOrganisationUnits() )
{
if ( !organisationUnitService.isInUserHierarchy( unit ) )
{
=== 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-16 18:30:37 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/datavalueset/SpringDataValueSetStore.java 2015-09-23 17:15:50 +0000
@@ -46,10 +46,12 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hisp.dhis.calendar.Calendar;
+import org.hisp.dhis.commons.util.TextUtils;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataset.DataSet;
import org.hisp.dhis.dxf2.common.IdSchemes;
import org.hisp.dhis.dxf2.datavalue.DataValue;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
import org.hisp.dhis.period.PeriodType;
import org.hisp.dhis.system.util.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -191,8 +193,23 @@
"join organisationunit ou on (dv.sourceid=ou.organisationunitid) " +
"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.sourceid in (" + getCommaDelimitedString( getIdentifiers( params.getOrganisationUnits() ) ) + ") ";
+ "where de.dataelementid in (" + getCommaDelimitedString( getIdentifiers( getDataElements( params.getDataSets() ) ) ) + ") ";
+
+ if ( params.isIncludeChildren() )
+ {
+ sql += "and (";
+
+ for ( OrganisationUnit parent : params.getOrganisationUnits() )
+ {
+ sql += "ou.path like '%" + parent.getUid() + "%' or ";
+ }
+
+ sql = TextUtils.removeLastOr( sql ) + ")";
+ }
+ else
+ {
+ sql += "and dv.sourceid in (" + getCommaDelimitedString( getIdentifiers( params.getOrganisationUnits() ) ) + ") ";
+ }
if ( params.hasStartEndDate() )
{