Search in sources :

Example 31 with SqlHelper

use of org.hisp.dhis.commons.util.SqlHelper in project dhis2-core by dhis2.

the class HibernateTrackedEntityInstanceStore method joinAttributeValueWithQueryParameter.

/**
 * Generates a single INNER JOIN for searching for an attribute by query
 * strings. Searches are done using lower() expression, since attribute
 * values are case insensitive. The query search is extremely slow compared
 * to alternatives. A query string (Can be multiple) has to match at least 1
 * attribute value for each attribute we have access to. We use Regex to
 * search, allowing both exact match and with wildcards (EQ or LIKE).
 *
 * @param params
 * @param attributes
 */
private void joinAttributeValueWithQueryParameter(TrackedEntityInstanceQueryParams params, StringBuilder attributes) {
    final String regexp = statementBuilder.getRegexpMatch();
    final String wordStart = statementBuilder.getRegexpWordStart();
    final String wordEnd = statementBuilder.getRegexpWordEnd();
    final String anyChar = "\\.*?";
    final String start = params.getQuery().isOperator(QueryOperator.LIKE) ? anyChar : wordStart;
    final String end = params.getQuery().isOperator(QueryOperator.LIKE) ? anyChar : wordEnd;
    SqlHelper orHlp = new SqlHelper(true);
    List<Long> itemIds = params.getAttributesAndFilters().stream().map(QueryItem::getItem).map(DimensionalItemObject::getId).collect(Collectors.toList());
    attributes.append("INNER JOIN trackedentityattributevalue Q ").append("ON Q.trackedentityinstanceid IN (").append(getCommaDelimitedString(itemIds)).append(") AND (");
    for (String queryToken : getTokens(params.getQuery().getFilter())) {
        final String query = statementBuilder.encode(queryToken, false);
        attributes.append(orHlp.or()).append("lower(Q.value) ").append(regexp).append(" '").append(start).append(StringUtils.lowerCase(query)).append(end).append(SINGLE_QUOTE);
    }
    attributes.append(")");
}
Also used : QueryItem(org.hisp.dhis.common.QueryItem) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) TextUtils.getCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString)

Example 32 with SqlHelper

use of org.hisp.dhis.commons.util.SqlHelper in project dhis2-core by dhis2.

the class HibernateTrackedEntityInstanceStore method getFromSubQueryProgramStageInstance.

/**
 * Generates an INNER JOIN with the program instances if event-filters are
 * specified. In the case of user assignment is part of the filter, we join
 * with the userinfo table as well.
 *
 * @param params
 * @return an SQL INNER JOIN for filtering on events.
 */
private String getFromSubQueryProgramStageInstance(TrackedEntityInstanceQueryParams params) {
    StringBuilder events = new StringBuilder();
    SqlHelper whereHlp = new SqlHelper(true);
    events.append("INNER JOIN (").append("SELECT PSI.programinstanceid ").append("FROM programstageinstance PSI ");
    if (params.hasAssignedUsers()) {
        events.append("INNER JOIN (").append("SELECT userinfoid AS userid ").append("FROM userinfo ").append("WHERE uid IN (").append(encodeAndQuote(params.getAssignedUsers())).append(") ").append(") AU ON AU.userid = PSI.assigneduserid");
    }
    if (params.hasEventStatus()) {
        String start = getMediumDateString(params.getEventStartDate());
        String end = getMediumDateString(params.getEventEndDate());
        if (params.isEventStatus(EventStatus.COMPLETED)) {
            events.append(getQueryDateConditionBetween(whereHlp, PSI_EXECUTIONDATE, start, end)).append(whereHlp.whereAnd()).append(PSI_STATUS).append(EQUALS).append(SINGLE_QUOTE).append(EventStatus.COMPLETED.name()).append(SINGLE_QUOTE).append(SPACE);
        } else if (params.isEventStatus(EventStatus.VISITED) || params.isEventStatus(EventStatus.ACTIVE)) {
            events.append(getQueryDateConditionBetween(whereHlp, PSI_EXECUTIONDATE, start, end)).append(whereHlp.whereAnd()).append(PSI_STATUS).append(EQUALS).append(SINGLE_QUOTE).append(EventStatus.ACTIVE.name()).append(SINGLE_QUOTE).append(SPACE);
        } else if (params.isEventStatus(EventStatus.SCHEDULE)) {
            events.append(getQueryDateConditionBetween(whereHlp, PSI_DUEDATE, start, end)).append(whereHlp.whereAnd()).append(PSI_STATUS).append(SPACE).append(IS_NOT_NULL).append(whereHlp.whereAnd()).append(PSI_EXECUTIONDATE).append(SPACE).append(IS_NULL).append(whereHlp.whereAnd()).append("date(now()) <= date(PSI.duedate) ");
        } else if (params.isEventStatus(EventStatus.OVERDUE)) {
            events.append(getQueryDateConditionBetween(whereHlp, PSI_DUEDATE, start, end)).append(whereHlp.whereAnd()).append(PSI_STATUS).append(SPACE).append(IS_NOT_NULL).append(whereHlp.whereAnd()).append(PSI_EXECUTIONDATE).append(SPACE).append(IS_NULL).append(whereHlp.whereAnd()).append("date(now()) > date(PSI.duedate) ");
        } else if (params.isEventStatus(EventStatus.SKIPPED)) {
            events.append(getQueryDateConditionBetween(whereHlp, PSI_DUEDATE, start, end)).append(whereHlp.whereAnd()).append(PSI_STATUS).append(EQUALS).append(SINGLE_QUOTE).append(EventStatus.SKIPPED.name()).append(SINGLE_QUOTE).append(SPACE);
        }
    }
    if (params.hasProgramStage()) {
        events.append(whereHlp.whereAnd()).append("PSI.programstageid = ").append(params.getProgramStage().getId()).append(SPACE);
    }
    if (params.isIncludeOnlyUnassignedEvents()) {
        events.append(whereHlp.whereAnd()).append("PSI.assigneduserid IS NULL ");
    }
    if (params.isIncludeOnlyAssignedEvents()) {
        events.append(whereHlp.whereAnd()).append("PSI.assigneduserid IS NOT NULL ");
    }
    if (!params.isIncludeDeleted()) {
        events.append(whereHlp.whereAnd()).append("PSI.deleted IS FALSE");
    }
    events.append(") PSI ON PSI.programinstanceid = PI.programinstanceid ");
    return events.toString();
}
Also used : SqlHelper(org.hisp.dhis.commons.util.SqlHelper) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) TextUtils.getCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString)

Example 33 with SqlHelper

use of org.hisp.dhis.commons.util.SqlHelper in project dhis2-core by dhis2.

the class JdbcEventStore method getOrgUnitSql.

private String getOrgUnitSql(SqlHelper hlp, EventSearchParams params, List<OrganisationUnit> organisationUnits) {
    StringBuilder orgUnitSql = new StringBuilder();
    if (params.getOrgUnit() != null && !params.isPathOrganisationUnitMode()) {
        orgUnitSql.append(" ou.organisationunitid = " + params.getOrgUnit().getId() + " ");
    } else {
        SqlHelper orHlp = new SqlHelper(true);
        String path = "ou.path LIKE '";
        for (OrganisationUnit organisationUnit : organisationUnits) {
            if (params.isOrganisationUnitMode(OrganisationUnitSelectionMode.DESCENDANTS)) {
                orgUnitSql.append(orHlp.or()).append(path).append(organisationUnit.getPath()).append("%' ").append(hlp.whereAnd()).append(" ou.hierarchylevel > " + organisationUnit.getLevel());
            } else if (params.isOrganisationUnitMode(OrganisationUnitSelectionMode.CHILDREN)) {
                orgUnitSql.append(orHlp.or()).append(path).append(organisationUnit.getPath()).append("%' ").append(hlp.whereAnd()).append(" ou.hierarchylevel = " + (organisationUnit.getLevel() + 1));
            } else {
                orgUnitSql.append(orHlp.or()).append(path).append(organisationUnit.getPath()).append("%' ");
            }
        }
        if (!organisationUnits.isEmpty()) {
            orgUnitSql.insert(0, " (");
            orgUnitSql.append(") ");
            if (params.isPathOrganisationUnitMode()) {
                orgUnitSql.insert(0, " (");
                orgUnitSql.append(orHlp.or()).append(" (ou.organisationunitid = " + params.getOrgUnit().getId() + ")) ");
            }
        }
    }
    return orgUnitSql.toString();
}
Also used : OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString)

Example 34 with SqlHelper

use of org.hisp.dhis.commons.util.SqlHelper in project dhis2-core by dhis2.

the class JdbcEventStore method buildGridSql.

private String buildGridSql(EventSearchParams params, List<OrganisationUnit> organisationUnits) {
    SqlHelper hlp = new SqlHelper();
    // ---------------------------------------------------------------------
    // Select clause
    // ---------------------------------------------------------------------
    StringBuilder sqlBuilder = new StringBuilder().append("select ").append(COLUMNS_ALIAS_MAP.entrySet().stream().map(col -> col.getKey() + " as " + col.getValue()).collect(Collectors.joining(", "))).append(" , ");
    for (QueryItem item : params.getDataElementsAndFilters()) {
        final String col = item.getItemId();
        final String dataValueValueSql = "psi.eventdatavalues #>> '{" + col + ", value}'";
        String queryCol = item.isNumeric() ? castToNumber(dataValueValueSql) : dataValueValueSql;
        queryCol += " as " + col + ", ";
        sqlBuilder.append(queryCol);
    }
    String intermediateSql = sqlBuilder.toString();
    sqlBuilder = new StringBuilder().append(removeLastComma(intermediateSql)).append(" ");
    // ---------------------------------------------------------------------
    // From and where clause
    // ---------------------------------------------------------------------
    sqlBuilder.append(getFromWhereClause(params, hlp, organisationUnits));
    // ---------------------------------------------------------------------
    // Order clause
    // ---------------------------------------------------------------------
    sqlBuilder.append(getGridOrderQuery(params));
    // ---------------------------------------------------------------------
    // Paging clause
    // ---------------------------------------------------------------------
    sqlBuilder.append(getEventPagingQuery(params));
    return sqlBuilder.toString();
}
Also used : EventUtils.userInfoToJson(org.hisp.dhis.dxf2.events.event.EventUtils.userInfoToJson) WKTReader(org.locationtech.jts.io.WKTReader) UID(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID) CREATEDCLIENT(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.CREATEDCLIENT) EventRow(org.hisp.dhis.dxf2.events.report.EventRow) DELETED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.DELETED) UPDATED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UPDATED) StringUtils(org.apache.commons.lang3.StringUtils) EVENT_CREATED_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_CREATED_ID) EVENT_EXECUTION_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_EXECUTION_DATE_ID) Relationship(org.hisp.dhis.dxf2.events.trackedentity.Relationship) EnrollmentStatus(org.hisp.dhis.dxf2.events.enrollment.EnrollmentStatus) STATIC_EVENT_COLUMNS(org.hisp.dhis.dxf2.events.event.AbstractEventService.STATIC_EVENT_COLUMNS) CREATED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.CREATED) Map(java.util.Map) SqlUtils.castToNumber(org.hisp.dhis.system.util.SqlUtils.castToNumber) EventDataValue(org.hisp.dhis.eventdatavalue.EventDataValue) SqlUtils.lower(org.hisp.dhis.system.util.SqlUtils.lower) SqlRowSet(org.springframework.jdbc.support.rowset.SqlRowSet) Repository(org.springframework.stereotype.Repository) EVENT_STATUS_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_STATUS_ID) OrganisationUnitSelectionMode(org.hisp.dhis.common.OrganisationUnitSelectionMode) JpaQueryUtils(org.hisp.dhis.query.JpaQueryUtils) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) Set(java.util.Set) STATUS(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.STATUS) EXECUTION_DATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.EXECUTION_DATE) PreparedStatement(java.sql.PreparedStatement) Attribute(org.hisp.dhis.dxf2.events.trackedentity.Attribute) TextUtils.removeLastComma(org.hisp.dhis.commons.util.TextUtils.removeLastComma) Slf4j(lombok.extern.slf4j.Slf4j) ParseException(org.locationtech.jts.io.ParseException) ProgramType(org.hisp.dhis.program.ProgramType) QueryFilter(org.hisp.dhis.common.QueryFilter) EVENT_STORED_BY_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_STORED_BY_ID) Joiner(com.google.common.base.Joiner) QueryItem(org.hisp.dhis.common.QueryItem) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance) EVENT_GEOMETRY(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_GEOMETRY) ArrayList(java.util.ArrayList) SQLException(java.sql.SQLException) Lists(com.google.common.collect.Lists) IdentifiableObjectManager(org.hisp.dhis.common.IdentifiableObjectManager) STOREDBY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.STOREDBY) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) OrderParam(org.hisp.dhis.webapi.controller.event.mapper.OrderParam) EVENT_ENROLLMENT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ENROLLMENT_ID) IdSchemes(org.hisp.dhis.common.IdSchemes) QueryOperator(org.hisp.dhis.common.QueryOperator) ID(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.ID) IOException(java.io.IOException) StatementBuilder(org.hisp.dhis.jdbc.StatementBuilder) ObjectUtils(org.hisp.dhis.util.ObjectUtils) GEOMETRY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.GEOMETRY) COMPLETEDBY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.COMPLETEDBY) DateUtils(org.hisp.dhis.util.DateUtils) TextUtils(org.hisp.dhis.commons.util.TextUtils) EVENT_PROGRAM_STAGE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_PROGRAM_STAGE_ID) Date(java.util.Date) ValueType(org.hisp.dhis.common.ValueType) DateUtils.getDateAfterAddition(org.hisp.dhis.util.DateUtils.getDateAfterAddition) RequiredArgsConstructor(lombok.RequiredArgsConstructor) EVENT_LAST_UPDATED_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_LAST_UPDATED_ID) ObjectReader(com.fasterxml.jackson.databind.ObjectReader) Gson(com.google.gson.Gson) SqlUtils.escapeSql(org.hisp.dhis.system.util.SqlUtils.escapeSql) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) EVENT_PROGRAM_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_PROGRAM_ID) EventUtils.eventDataValuesToJson(org.hisp.dhis.dxf2.events.event.EventUtils.eventDataValuesToJson) EVENT_DUE_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_DUE_DATE_ID) ImmutableMap(com.google.common.collect.ImmutableMap) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) Timestamp(java.sql.Timestamp) Collection(java.util.Collection) UserInfoSnapshot(org.hisp.dhis.program.UserInfoSnapshot) EventStatus(org.hisp.dhis.event.EventStatus) Collectors(java.util.stream.Collectors) TextUtils.splitToArray(org.hisp.dhis.commons.util.TextUtils.splitToArray) List(java.util.List) CollectionUtils.isNotEmpty(org.apache.commons.collections4.CollectionUtils.isNotEmpty) Environment(org.springframework.core.env.Environment) AclService(org.hisp.dhis.security.acl.AclService) Optional(java.util.Optional) Geometry(org.locationtech.jts.geom.Geometry) BatchPreparedStatementSetterWithKeyHolder(org.hisp.dhis.jdbc.BatchPreparedStatementSetterWithKeyHolder) EVENT_ORG_UNIT_NAME(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ORG_UNIT_NAME) EVENT_CREATED_BY_USER_INFO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_CREATED_BY_USER_INFO_ID) EVENT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ID) DataAccessException(org.springframework.dao.DataAccessException) HashMap(java.util.HashMap) Multimap(com.google.common.collect.Multimap) Program(org.hisp.dhis.program.Program) JdbcTemplate(org.springframework.jdbc.core.JdbcTemplate) HashSet(java.util.HashSet) DataElement(org.hisp.dhis.dataelement.DataElement) PGobject(org.postgresql.util.PGobject) ImmutableList(com.google.common.collect.ImmutableList) UPDATEDCLIENT(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UPDATEDCLIENT) Qualifier(org.springframework.beans.factory.annotation.Qualifier) User(org.hisp.dhis.user.User) EVENT_ORG_UNIT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ORG_UNIT_ID) EVENT_LAST_UPDATED_BY_USER_INFO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_LAST_UPDATED_BY_USER_INFO_ID) EVENT_DELETED(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_DELETED) JdbcUtils(org.hisp.dhis.jdbc.JdbcUtils) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) EventUtils.jsonToUserInfo(org.hisp.dhis.dxf2.events.event.EventUtils.jsonToUserInfo) ProgramStage(org.hisp.dhis.program.ProgramStage) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) ProgramStatus(org.hisp.dhis.program.ProgramStatus) Collectors.toList(java.util.stream.Collectors.toList) CollectionUtils(org.hisp.dhis.commons.collection.CollectionUtils) EVENT_ATTRIBUTE_OPTION_COMBO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ATTRIBUTE_OPTION_COMBO_ID) JsonEventDataValueSetBinaryType(org.hisp.dhis.hibernate.jsonb.type.JsonEventDataValueSetBinaryType) CurrentUserService(org.hisp.dhis.user.CurrentUserService) COMPLETEDDATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.COMPLETEDDATE) CachingMap(org.hisp.dhis.commons.collection.CachingMap) DUE_DATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.DUE_DATE) Comparator(java.util.Comparator) EVENT_COMPLETED_BY_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_COMPLETED_BY_ID) EVENT_COMPLETED_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_COMPLETED_DATE_ID) IdScheme(org.hisp.dhis.common.IdScheme) QueryItem(org.hisp.dhis.common.QueryItem) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString)

Example 35 with SqlHelper

use of org.hisp.dhis.commons.util.SqlHelper in project dhis2-core by dhis2.

the class JdbcAnalyticsManager method getWhereClause.

/**
 * Generates the where clause of the query SQL.
 */
private String getWhereClause(DataQueryParams params, AnalyticsTableType tableType) {
    SqlHelper sqlHelper = new SqlHelper();
    String sql = "";
    for (DimensionalObject dim : params.getDimensions()) {
        if (!dim.getItems().isEmpty() && !dim.isFixed()) {
            String col = quoteAlias(dim.getDimensionName());
            sql += sqlHelper.whereAnd() + " " + col + " in (" + getQuotedCommaDelimitedString(getUids(dim.getItems())) + ") ";
        }
    }
    // ---------------------------------------------------------------------
    // Filters
    // ---------------------------------------------------------------------
    ListMap<String, DimensionalObject> filterMap = params.getDimensionFilterMap();
    for (String dimension : filterMap.keySet()) {
        List<DimensionalObject> filters = filterMap.get(dimension);
        if (DimensionalObjectUtils.anyDimensionHasItems(filters)) {
            sql += sqlHelper.whereAnd() + " ( ";
            for (DimensionalObject filter : filters) {
                if (filter.hasItems()) {
                    String col = quoteAlias(filter.getDimensionName());
                    sql += col + " in (" + getQuotedCommaDelimitedString(getUids(filter.getItems())) + ") or ";
                }
            }
            sql = removeLastOr(sql) + ") ";
        }
    }
    if (params.isDataApproval()) {
        sql += sqlHelper.whereAnd() + " ( ";
        for (OrganisationUnit unit : params.getDataApprovalLevels().keySet()) {
            String ouCol = quoteAlias(LEVEL_PREFIX + unit.getLevel());
            Integer level = params.getDataApprovalLevels().get(unit);
            sql += "(" + ouCol + " = '" + unit.getUid() + "' and " + quoteAlias(COL_APPROVALLEVEL) + " <= " + level + ") or ";
        }
        sql = removeLastOr(sql) + ") ";
    }
    if (params.isRestrictByOrgUnitOpeningClosedDate() && params.hasStartEndDateRestriction()) {
        sql += sqlHelper.whereAnd() + " (" + "(" + quoteAlias("ouopeningdate") + " <= '" + getMediumDateString(params.getStartDateRestriction()) + "' or " + quoteAlias("ouopeningdate") + " is null) and " + "(" + quoteAlias("oucloseddate") + " >= '" + getMediumDateString(params.getEndDateRestriction()) + "' or " + quoteAlias("oucloseddate") + " is null)) ";
    }
    if (params.isRestrictByCategoryOptionStartEndDate() && params.hasStartEndDateRestriction()) {
        sql += sqlHelper.whereAnd() + " (" + "(" + quoteAlias("costartdate") + " <= '" + getMediumDateString(params.getStartDateRestriction()) + "' or " + quoteAlias("costartdate") + " is null) and " + "(" + quoteAlias("coenddate") + " >= '" + getMediumDateString(params.getEndDateRestriction()) + "' or " + quoteAlias("coenddate") + " is null)) ";
    }
    if (tableType.hasPeriodDimension() && params.hasStartDate()) {
        sql += sqlHelper.whereAnd() + " " + quoteAlias("pestartdate") + "  >= '" + getMediumDateString(params.getStartDate()) + "' ";
    }
    if (tableType.hasPeriodDimension() && params.hasEndDate()) {
        sql += sqlHelper.whereAnd() + " " + quoteAlias("peenddate") + " <= '" + getMediumDateString(params.getEndDate()) + "' ";
    }
    if (params.isTimely()) {
        sql += sqlHelper.whereAnd() + " " + quoteAlias("timely") + " is true ";
    }
    if (!params.isSkipPartitioning() && params.hasPartitions()) {
        sql += sqlHelper.whereAnd() + " " + quoteAlias("year") + " in (" + TextUtils.getCommaDelimitedString(params.getPartitions().getPartitions()) + ") ";
    }
    if (params.getAggregationType().isFirstOrLastOrLastInPeriodAggregationType()) {
        sql += sqlHelper.whereAnd() + " " + quoteAlias("pe_rank") + " = 1 ";
    }
    return sql;
}
Also used : OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) DimensionalObject(org.hisp.dhis.common.DimensionalObject)

Aggregations

SqlHelper (org.hisp.dhis.commons.util.SqlHelper)39 OrganisationUnit (org.hisp.dhis.organisationunit.OrganisationUnit)17 TextUtils.getQuotedCommaDelimitedString (org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString)14 DateUtils.getMediumDateString (org.hisp.dhis.util.DateUtils.getMediumDateString)11 QueryItem (org.hisp.dhis.common.QueryItem)8 QueryFilter (org.hisp.dhis.common.QueryFilter)7 DateUtils.getMediumDateString (org.hisp.dhis.system.util.DateUtils.getMediumDateString)6 DateUtils.getLongGmtDateString (org.hisp.dhis.util.DateUtils.getLongGmtDateString)6 Date (java.util.Date)5 List (java.util.List)5 Collectors (java.util.stream.Collectors)5 ArrayList (java.util.ArrayList)4 Set (java.util.Set)4 DimensionalObject (org.hisp.dhis.common.DimensionalObject)4 JdbcTemplate (org.springframework.jdbc.core.JdbcTemplate)4 Slf4j (lombok.extern.slf4j.Slf4j)3 StringUtils (org.apache.commons.lang3.StringUtils)3 Query (org.hibernate.query.Query)3 IdentifiableObjectUtils.getUids (org.hisp.dhis.common.IdentifiableObjectUtils.getUids)3 SqlRowSet (org.springframework.jdbc.support.rowset.SqlRowSet)3