Search in sources :

Example 1 with SPACED_WHERE

use of org.hisp.dhis.dataitem.query.shared.StatementUtil.SPACED_WHERE in project dhis2-core by dhis2.

the class DataElementQuery method getStatement.

@Override
public String getStatement(final MapSqlParameterSource paramsMap) {
    final StringBuilder sql = new StringBuilder();
    sql.append("(");
    // Creating a temp translated table to be queried.
    sql.append(SPACED_SELECT + "* from (");
    if (hasNonBlankStringPresence(paramsMap, LOCALE)) {
        // Selecting translated names.
        sql.append(selectRowsContainingTranslatedName());
    } else {
        // Retrieving all rows ignoring translation as no locale is defined.
        sql.append(selectAllRowsIgnoringAnyTranslation());
    }
    sql.append(" group by item_name, item_uid, item_valuetype, item_code, item_domaintype, item_sharing, item_shortname," + " i18n_first_name, i18n_first_shortname, i18n_second_name, i18n_second_shortname");
    // Closing the temp table.
    sql.append(" ) t");
    sql.append(SPACED_WHERE);
    // Applying filters, ordering and limits.
    // Mandatory filters. They do not respect the root junction filtering.
    sql.append(always(sharingConditions("t.item_sharing", READ_ACCESS, paramsMap)));
    sql.append(" and ");
    // ONLY aggregates
    sql.append(always("t.item_domaintype = 'AGGREGATE'"));
    // Optional filters, based on the current root junction.
    final OptionalFilterBuilder optionalFilters = new OptionalFilterBuilder(paramsMap);
    final Set<String> aggregatableTypes = getAggregatables().stream().map(type -> type.name()).collect(toSet());
    // consider the domainType = 'AGGREGATE'. Very specific to DataElements.
    if (paramsMap != null && paramsMap.hasValue(VALUE_TYPES) && paramsMap.getValue(VALUE_TYPES) != null && !((Set) paramsMap.getValue(VALUE_TYPES)).containsAll(aggregatableTypes)) {
        optionalFilters.append(ifSet(valueTypeFiltering("t.item_valuetype", paramsMap)));
    }
    optionalFilters.append(ifSet(displayNameFiltering("t.i18n_first_name", paramsMap)));
    optionalFilters.append(ifSet(displayShortNameFiltering("t.i18n_first_shortname", paramsMap)));
    optionalFilters.append(ifSet(nameFiltering("t.item_name", paramsMap)));
    optionalFilters.append(ifSet(shortNameFiltering("t.item_shortname", paramsMap)));
    optionalFilters.append(ifSet(uidFiltering("t.item_uid", paramsMap)));
    sql.append(ifAny(optionalFilters.toString()));
    final String identifiableStatement = identifiableTokenFiltering("t.item_uid", "t.item_code", "t.i18n_first_name", null, paramsMap);
    if (isNotBlank(identifiableStatement)) {
        sql.append(rootJunction(paramsMap));
        sql.append(identifiableStatement);
    }
    sql.append(ifSet(ordering("t.i18n_first_name, t.i18n_second_name, t.item_uid", "t.item_name, t.item_uid", "t.i18n_first_shortname, t.i18n_second_shortname, t.item_uid", "t.item_shortname, t.item_uid", paramsMap)));
    sql.append(ifSet(maxLimit(paramsMap)));
    sql.append(")");
    final String fullStatement = sql.toString();
    log.trace("Full SQL: " + fullStatement);
    return fullStatement;
}
Also used : FilteringStatement.nameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.nameFiltering) LimitStatement.maxLimit(org.hisp.dhis.dataitem.query.shared.LimitStatement.maxLimit) MapSqlParameterSource(org.springframework.jdbc.core.namedparam.MapSqlParameterSource) FilteringStatement.uidFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.uidFiltering) NameTranslationStatement.translationNamesColumnsFor(org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesColumnsFor) ValueType.getAggregatables(org.hisp.dhis.common.ValueType.getAggregatables) FilteringStatement.displayShortNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayShortNameFiltering) ParamPresenceChecker.hasNonBlankStringPresence(org.hisp.dhis.dataitem.query.shared.ParamPresenceChecker.hasNonBlankStringPresence) LOCALE(org.hisp.dhis.dataitem.query.shared.QueryParam.LOCALE) SPACED_WHERE(org.hisp.dhis.dataitem.query.shared.StatementUtil.SPACED_WHERE) FilteringStatement.always(org.hisp.dhis.dataitem.query.shared.FilteringStatement.always) FilteringStatement.displayNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayNameFiltering) FilteringStatement.valueTypeFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.valueTypeFiltering) Collectors.toSet(java.util.stream.Collectors.toSet) FilteringStatement.rootJunction(org.hisp.dhis.dataitem.query.shared.FilteringStatement.rootJunction) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) READ_ACCESS(org.hisp.dhis.dataitem.query.shared.UserAccessStatement.READ_ACCESS) Set(java.util.Set) FilteringStatement.ifSet(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet) FilteringStatement.shortNameFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.shortNameFiltering) VALUE_TYPES(org.hisp.dhis.dataitem.query.shared.QueryParam.VALUE_TYPES) UserAccessStatement.sharingConditions(org.hisp.dhis.dataitem.query.shared.UserAccessStatement.sharingConditions) FilteringStatement.ifAny(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifAny) SPACED_SELECT(org.hisp.dhis.dataitem.query.shared.StatementUtil.SPACED_SELECT) OptionalFilterBuilder(org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder) Slf4j(lombok.extern.slf4j.Slf4j) Component(org.springframework.stereotype.Component) StringUtils.isNotBlank(org.apache.commons.lang3.StringUtils.isNotBlank) PROGRAM_ID(org.hisp.dhis.dataitem.query.shared.QueryParam.PROGRAM_ID) OrderingStatement.ordering(org.hisp.dhis.dataitem.query.shared.OrderingStatement.ordering) NameTranslationStatement.translationNamesJoinsOn(org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesJoinsOn) FilteringStatement.identifiableTokenFiltering(org.hisp.dhis.dataitem.query.shared.FilteringStatement.identifiableTokenFiltering) Collectors.toSet(java.util.stream.Collectors.toSet) Set(java.util.Set) FilteringStatement.ifSet(org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet) OptionalFilterBuilder(org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder)

Aggregations

Set (java.util.Set)1 Collectors.toSet (java.util.stream.Collectors.toSet)1 Slf4j (lombok.extern.slf4j.Slf4j)1 StringUtils.isNotBlank (org.apache.commons.lang3.StringUtils.isNotBlank)1 BaseIdentifiableObject (org.hisp.dhis.common.BaseIdentifiableObject)1 ValueType.getAggregatables (org.hisp.dhis.common.ValueType.getAggregatables)1 FilteringStatement.always (org.hisp.dhis.dataitem.query.shared.FilteringStatement.always)1 FilteringStatement.displayNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayNameFiltering)1 FilteringStatement.displayShortNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.displayShortNameFiltering)1 FilteringStatement.identifiableTokenFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.identifiableTokenFiltering)1 FilteringStatement.ifAny (org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifAny)1 FilteringStatement.ifSet (org.hisp.dhis.dataitem.query.shared.FilteringStatement.ifSet)1 FilteringStatement.nameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.nameFiltering)1 FilteringStatement.rootJunction (org.hisp.dhis.dataitem.query.shared.FilteringStatement.rootJunction)1 FilteringStatement.shortNameFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.shortNameFiltering)1 FilteringStatement.uidFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.uidFiltering)1 FilteringStatement.valueTypeFiltering (org.hisp.dhis.dataitem.query.shared.FilteringStatement.valueTypeFiltering)1 LimitStatement.maxLimit (org.hisp.dhis.dataitem.query.shared.LimitStatement.maxLimit)1 NameTranslationStatement.translationNamesColumnsFor (org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesColumnsFor)1 NameTranslationStatement.translationNamesJoinsOn (org.hisp.dhis.dataitem.query.shared.NameTranslationStatement.translationNamesJoinsOn)1