=== 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 2013-03-10 14:13:41 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/DataQueryParams.java 2013-03-10 14:26:48 +0000 @@ -142,7 +142,8 @@ } /** - * Creates a mapping between dimension identifiers and filter dimensions. + * Creates a mapping between dimension identifiers and filter dimensions. Filters + * are guaranteed not to be null. */ public ListMap getDimensionFilterMap() { @@ -150,7 +151,10 @@ for ( Dimension filter : filters ) { - map.putValue( filter.getDimension(), filter ); + if ( filter != null ) + { + map.putValue( filter.getDimension(), filter ); + } } return map; @@ -643,6 +647,28 @@ return map; } + /** + * Indicates whether at least one of the given dimenions has at least one + * item. + */ + public static boolean anyDimensionHasItems( Collection dimensions ) + { + if ( dimensions == null || dimensions.isEmpty() ) + { + return false; + } + + for ( Dimension dim : dimensions ) + { + if ( dim.hasItems() ) + { + return true; + } + } + + return false; + } + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java' --- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2013-03-10 13:51:37 +0000 +++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/data/JdbcAnalyticsManager.java 2013-03-10 14:26:48 +0000 @@ -131,19 +131,22 @@ } } - ListMap filters = params.getDimensionFilterMap(); - - //TODO check if any items for all filters - - for ( String dimension : filters.keySet() ) + ListMap filterMap = params.getDimensionFilterMap(); + + for ( String dimension : filterMap.keySet() ) { - sql += sqlHelper.whereAnd() + " ("; + List filters = filterMap.get( dimension ); - for ( Dimension filter : filters.get( dimension ) ) + if ( DataQueryParams.anyDimensionHasItems( filters ) ) { - if ( filter != null && filter.hasItems() ) + sql += sqlHelper.whereAnd() + " ("; + + for ( Dimension filter : filters ) { - sql += filter.getDimensionName() + " in (" + getQuotedCommaDelimitedString( getUids( filter.getItems() ) ) + ") or "; + if ( filter.hasItems() ) + { + sql += filter.getDimensionName() + " in (" + getQuotedCommaDelimitedString( getUids( filter.getItems() ) ) + ") or "; + } } }