use of org.hisp.dhis.dataitem.query.shared.OptionalFilterBuilder in project dhis2-core by dhis2.
the class ProgramStageDataElementQuery 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 program.name, program.shortname, item_name, " + COMMON_UIDS + ", item_valuetype, item_code, 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");
sql.append(ifSet(valueTypeFiltering("t.item_valuetype", paramsMap)));
// Optional filters, based on the current root junction.
final OptionalFilterBuilder optionalFilters = new OptionalFilterBuilder(paramsMap);
optionalFilters.append(ifSet(displayNameFiltering("t.i18n_first_name", "t.i18n_second_name", paramsMap)));
optionalFilters.append(ifSet(displayShortNameFiltering("t.i18n_first_shortname", "t.i18n_second_shortname", paramsMap)));
optionalFilters.append(ifSet(nameFiltering("t.program_name", "t.item_name", paramsMap)));
optionalFilters.append(ifSet(shortNameFiltering("t.program_shortname", "t.item_shortname", paramsMap)));
optionalFilters.append(ifSet(programIdFiltering("t.program_uid", 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_second_name", "t.i18n_first_name", 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.program_name, t.item_name, t.item_uid", "t.i18n_first_shortname, i18n_second_shortname, t.item_uid", "t.program_name, 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;
}
Aggregations