private String makeFilterCondition()

in api/src/main/java/com/epam/pipeline/dao/pipeline/PipelineRunDao.java [737:882]


    private String makeFilterCondition(PipelineRunFilterVO filter,
                                       PipelineRunFilterVO.ProjectFilter projectFilter,
                                       MapSqlParameterSource params,
                                       boolean firstCondition) {
        if (filter.isEmpty()) {
            return "";
        }

        StringBuilder whereBuilder = new StringBuilder(CLAUSE_LENGTH);
        int clausesCount = firstCondition ? 0 : 1;
        if (firstCondition) {
            whereBuilder.append(WHERE);
        }
        if (CollectionUtils.isNotEmpty(filter.getVersions())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.version in (:")
                    .append(PipelineRunParameters.VERSION.name())
                    .append(')');
            params.addValue(PipelineRunParameters.VERSION.name(), filter.getVersions());
            clausesCount++;
        }

        clausesCount = addOwnerClause(params, whereBuilder, clausesCount, filter.getOwners());
        clausesCount = addRoleClause(params, whereBuilder, clausesCount, filter.getRoles());

        if (CollectionUtils.isNotEmpty(filter.getRegionIds())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.node_cloud_region in (:")
                    .append(PipelineRunParameters.NODE_CLOUD_REGION.name())
                    .append(')');
            params.addValue(PipelineRunParameters.NODE_CLOUD_REGION.name(), filter.getRegionIds());
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getPipelineIds())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.pipeline_id in (:")
                    .append(PipelineRunParameters.PIPELINE_ID.name())
                    .append(')');
            params.addValue(PipelineRunParameters.PIPELINE_ID.name(), filter.getPipelineIds());
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getDockerImages())) {
            appendAnd(whereBuilder, clausesCount);
            buildDockerImagesClause(params, whereBuilder, filter.getDockerImages());
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getStatuses())) {
            appendAnd(whereBuilder, clausesCount);
            buildStatusesClause(params, whereBuilder, filter.getStatuses());
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getInstanceTypes())) {
            appendAnd(whereBuilder, clausesCount);
            buildInstanceTypesClause(params, whereBuilder, filter.getInstanceTypes());
            clausesCount++;
        }

        if (filter.getStartDateFrom() != null) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.start_date >= :").append(PipelineRunParameters.START_DATE_FROM.name());
            params.addValue(PipelineRunParameters.START_DATE_FROM.name(), filter.getStartDateFrom());
            clausesCount++;
        }

        if (filter.getEndDateTo() != null) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.end_date <= :").append(PipelineRunParameters.END_DATE_TO.name());
            params.addValue(PipelineRunParameters.END_DATE_TO.name(), filter.getEndDateTo());
            clausesCount++;
        }

        if (StringUtils.isNotBlank(filter.getPartialParameters())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.parameters like :").append(PipelineRunParameters.PARAMETERS.name());
            params.addValue(PipelineRunParameters.PARAMETERS.name(),
                    String.format("%%%s%%", filter.getPartialParameters()));
            clausesCount++;
        }

        if (filter.getParentId() != null) {
            appendAnd(whereBuilder, clausesCount);

            whereBuilder.append(String.format(" (r.parent_id = %d OR r.parameters = 'parent-id=%d' "
                            + "OR r.parameters like "
                            + "any(array['%%|parent-id=%d|%%','%%|parent-id=%d','parent-id=%d|%%', " +
                            "'parent-id=%d=%%', '%%|parent-id=%d=%%']))",
                    filter.getParentId(),
                    filter.getParentId(),
                    filter.getParentId(),
                    filter.getParentId(),
                    filter.getParentId(),
                    filter.getParentId(),
                    filter.getParentId()));
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getEntitiesIds())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(String.format(" r.entities_ids && '%s'",
                    mapListToSqlArray(filter.getEntitiesIds(), getConnection())));
            clausesCount++;
        }

        if (CollectionUtils.isNotEmpty(filter.getConfigurationIds())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(String.format(" r.configuration_id IN (:%s)",
                    PipelineRunParameters.CONFIGURATION_ID.name()));
            params.addValue(PipelineRunParameters.CONFIGURATION_ID.name(), filter.getConfigurationIds());
            clausesCount++;
        }

        if (MapUtils.isNotEmpty(filter.getTags())) {
            appendAnd(whereBuilder, clausesCount);
            clausesCount++;
            buildTagsClause(filter.getTags(), whereBuilder);
        }

        if (StringUtils.isNotBlank(filter.getPrettyUrl())) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(String.format(" r.pretty_url like :%s", PipelineRunParameters.PRETTY_URL.name()));
            params.addValue(PipelineRunParameters.PRETTY_URL.name(),
                    String.format("%%\"path\":\"%s\"%%", filter.getPrettyUrl()));
            clausesCount++;
        }

        if (filter.isMasterRun()) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" (r.node_count > 0 OR r.parameters like '%CP_CAP_AUTOSCALE=true=boolean%')");
            clausesCount++;
        }

        if (filter.isWorkerRun()) {
            appendAnd(whereBuilder, clausesCount);
            whereBuilder.append(" r.parent_id is not null");
            clausesCount++;
        }

        appendProjectFilter(projectFilter, params, whereBuilder, clausesCount);
        appendAclFilters(filter, params, whereBuilder, clausesCount);

        return whereBuilder.toString();
    }