=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-04-10 20:40:06 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2014-04-10 21:12:18 +0000 @@ -1142,30 +1142,7 @@ { return getDimensionOptions( key ) != null ? getDimensionOptions( key ) : getFilterOptions( key ); } - - /** - * Replaces the items for the dimension or filter identified by the given key. - * No action is taken if no dimensions or filters exist. - */ - public void replaceDimensionOrFilterOptions( String key, List items ) - { - int dimensionIndex = dimensions.indexOf( new BaseDimensionalObject( key ) ); - - if ( dimensionIndex != -1 ) - { - DimensionalObject dim = dimensions.get( dimensionIndex ); - dimensions.set( dimensionIndex, new BaseDimensionalObject( dim.getDimension(), dim.getDimensionType(), dim.getDimensionName(), items ) ); - } - - int filterIndex = filters.indexOf( new BaseDimensionalObject( key ) ); - - if ( filterIndex != -1 ) - { - DimensionalObject flt = filters.get( filterIndex ); - filters.set( filterIndex, new BaseDimensionalObject( flt.getDimension(), flt.getDimensionType(), flt.getDimensionName(), items ) ); - } - } - + /** * Retrieves the options for the given dimension identifier. If the dx dimension * is specified, all concrete dimensions (in|de|dc|ds) are returned as a single === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java 2014-04-08 18:25:25 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/QueryPlanner.java 2014-04-10 21:12:18 +0000 @@ -96,6 +96,14 @@ List groupByOrgUnitLevel( DataQueryParams params ); /** + * Groups the given query into sub queries based on its periods and which + * partition it should be executed against. Sets the partition table name on + * each query. Queries are grouped based on periods if appearing as a + * dimension. + */ + List groupByPartition( DataQueryParams params, String tableName, String tableSuffix ); + + /** * If periods appear as dimensions in the given query; groups the query into * sub queries based on the period type of the periods. Sets the period type * name on each query. If periods appear as filters; replaces the period filter === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-08 19:36:25 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/DefaultQueryPlanner.java 2014-04-10 21:12:18 +0000 @@ -212,7 +212,7 @@ List queries = new ArrayList(); - List groupedByPartition = groupByPartition( params, tableName ); + List groupedByPartition = groupByPartition( params, tableName, null ); for ( DataQueryParams byPartition : groupedByPartition ) { @@ -388,13 +388,7 @@ // Supportive - group by methods // ------------------------------------------------------------------------- - /** - * Groups the given query into sub queries based on its periods and which - * partition it should be executed against. Sets the partition table name on - * each query. Queries are grouped based on periods if appearing as a - * dimension. - */ - private List groupByPartition( DataQueryParams params, String tableName ) + public List groupByPartition( DataQueryParams params, String tableName, String tableSuffix ) { List queries = new ArrayList(); @@ -405,7 +399,7 @@ } else if ( params.getPeriods() != null && !params.getPeriods().isEmpty() ) { - ListMap partitionPeriodMap = PartitionUtils.getPartitionPeriodMap( params.getPeriods(), tableName, null ); + ListMap partitionPeriodMap = PartitionUtils.getPartitionPeriodMap( params.getPeriods(), tableName, tableSuffix ); for ( Partitions partitions : partitionPeriodMap.keySet() ) { @@ -418,7 +412,7 @@ else if ( params.getFilterPeriods() != null && !params.getFilterPeriods().isEmpty() ) { DataQueryParams query = params.instance(); - query.setPartitions( PartitionUtils.getPartitions( params.getFilterPeriods(), tableName, null ) ); + query.setPartitions( PartitionUtils.getPartitions( params.getFilterPeriods(), tableName, tableSuffix ) ); queries.add( query ); } else === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2014-04-10 20:40:06 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventQueryPlanner.java 2014-04-10 21:12:18 +0000 @@ -28,15 +28,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import static org.hisp.dhis.common.DimensionalObject.PERIOD_DIM_ID; - import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hisp.dhis.analytics.DataQueryParams; -import org.hisp.dhis.analytics.Partitions; import org.hisp.dhis.analytics.QueryPlanner; import org.hisp.dhis.analytics.event.EventAnalyticsManager; import org.hisp.dhis.analytics.event.EventAnalyticsService; @@ -45,7 +42,6 @@ import org.hisp.dhis.analytics.table.PartitionUtils; import org.hisp.dhis.common.DimensionalObject; import org.hisp.dhis.common.IllegalQueryException; -import org.hisp.dhis.common.ListMap; import org.hisp.dhis.common.NameableObject; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.organisationunit.OrganisationUnitService; @@ -179,12 +175,12 @@ private List groupByPartition( EventQueryParams params, List validPartitions ) { - List queries = new ArrayList(); - String tableSuffix = "_" + params.getProgram().getUid(); if ( params.hasStartEndDate() ) { + List queries = new ArrayList(); + Period queryPeriod = new Period(); queryPeriod.setStartDate( params.getStartDate() ); queryPeriod.setEndDate( params.getEndDate() ); @@ -196,21 +192,13 @@ { queries.add( query ); } + + return queries; } else // Aggregate only { - ListMap partitionPeriodMap = PartitionUtils.getPartitionPeriodMap( params.getDimensionOrFilter( PERIOD_DIM_ID ), TABLE_PREFIX, tableSuffix ); - - for ( Partitions partitions : partitionPeriodMap.keySet() ) - { - EventQueryParams query = params.instance(); - query.replaceDimensionOrFilterOptions( DimensionalObject.PERIOD_DIM_ID, partitionPeriodMap.get( partitions ) ); - query.setPartitions( partitions ); - queries.add( query ); - } + return convert( queryPlanner.groupByPartition( params, TABLE_PREFIX, tableSuffix ) ); } - - return queries; } private static List convert( List params )