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();
}