Skip to content

Commit db805c1

Browse files
authored
refactor: Remove unnecessary parenthesis check [DHIS2-18417] (#19385)
1 parent 43d4175 commit db805c1

File tree

1 file changed

+26
-33
lines changed

1 file changed

+26
-33
lines changed

dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManager.java

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import static java.util.stream.Collectors.toList;
3131
import static org.apache.commons.lang3.StringUtils.EMPTY;
3232
import static org.hisp.dhis.analytics.table.model.Skip.SKIP;
33-
import static org.hisp.dhis.analytics.util.AnalyticsUtils.getClosingParentheses;
3433
import static org.hisp.dhis.analytics.util.AnalyticsUtils.getColumnType;
3534
import static org.hisp.dhis.commons.util.TextUtils.emptyIfTrue;
3635
import static org.hisp.dhis.commons.util.TextUtils.format;
@@ -52,7 +51,6 @@
5251
import java.util.Map;
5352
import java.util.Objects;
5453
import lombok.extern.slf4j.Slf4j;
55-
import org.apache.commons.lang3.Validate;
5654
import org.hisp.dhis.analytics.AnalyticsTableHookService;
5755
import org.hisp.dhis.analytics.AnalyticsTableType;
5856
import org.hisp.dhis.analytics.AnalyticsTableUpdateParams;
@@ -528,40 +526,53 @@ private List<AnalyticsTableColumn> getColumnForDataElement(
528526
private List<AnalyticsTableColumn> getColumnForOrgUnitDataElement(DataElement dataElement) {
529527
List<AnalyticsTableColumn> columns = new ArrayList<>();
530528

531-
String columnExpression =
532-
sqlBuilder.jsonExtractNested("eventdatavalues", dataElement.getUid(), "value");
533-
String fromClause =
534-
qualifyVariables("from ${organisationunit} ou where ou.uid = " + columnExpression);
535-
536529
if (isSpatialSupport()) {
537-
String fromType = "ou.geometry " + fromClause;
538-
String geoExpression = getOrgUnitSelectExpression(dataElement, fromType);
539-
540530
columns.add(
541531
AnalyticsTableColumn.builder()
542532
.name((dataElement.getUid() + OU_GEOMETRY_COL_SUFFIX))
543533
.dimensionType(AnalyticsDimensionType.DYNAMIC)
544534
.dataType(GEOMETRY)
545-
.selectExpression(geoExpression)
535+
.selectExpression(getOrgUnitSelectSubquery("geometry", dataElement))
546536
.indexType(IndexType.GIST)
547537
.build());
548538
}
549539

550-
String fromTypeSql = "ou.name " + fromClause;
551-
String ouNameSql = getOrgUnitSelectExpression(dataElement, fromTypeSql);
552-
553540
columns.add(
554541
AnalyticsTableColumn.builder()
555542
.name((dataElement.getUid() + OU_NAME_COL_SUFFIX))
556543
.dimensionType(AnalyticsDimensionType.DYNAMIC)
557544
.dataType(TEXT)
558-
.selectExpression(ouNameSql)
545+
.selectExpression(getOrgUnitSelectSubquery("name", dataElement))
559546
.skipIndex(SKIP)
560547
.build());
561548

562549
return columns;
563550
}
564551

552+
/**
553+
* Returns a org unit select query.
554+
*
555+
* @param column the column name.
556+
* @param dataElement the {@link DataElement}.
557+
* @return an org unit select query.
558+
*/
559+
private String getOrgUnitSelectSubquery(String column, DataElement dataElement) {
560+
String format =
561+
"""
562+
(select ou.${column} from ${organisationunit} ou \
563+
where ou.uid = ${columnExpression}) as ${alias}""";
564+
String columnExpression =
565+
sqlBuilder.jsonExtractNested("eventdatavalues", dataElement.getUid(), "value");
566+
String alias = quote(dataElement.getUid());
567+
568+
return replaceQualify(
569+
format,
570+
Map.of(
571+
"column", column,
572+
"columnExpression", columnExpression,
573+
"alias", alias));
574+
}
575+
565576
/**
566577
* Returns columns for attributes of the given program.
567578
*
@@ -625,24 +636,6 @@ private List<AnalyticsTableColumn> getColumnForAttributeWithLegendSet(
625636
.toList();
626637
}
627638

628-
/**
629-
* Returns a select statement for the given select expression.
630-
*
631-
* @param dataElement the data element to create the select statement for.
632-
* @param selectExpression the select expression.
633-
* @return a select expression.
634-
*/
635-
private String getOrgUnitSelectExpression(DataElement dataElement, String selectExpression) {
636-
Validate.isTrue(dataElement.getValueType().isOrganisationUnit());
637-
String prts = getClosingParentheses(selectExpression);
638-
return replaceQualify(
639-
"(select ${selectExpression})${closingParentheses} as ${uid}",
640-
Map.of(
641-
"selectExpression", selectExpression,
642-
"closingParentheses", prts,
643-
"uid", quote(dataElement.getUid())));
644-
}
645-
646639
/**
647640
* Returns a list of columns.
648641
*

0 commit comments

Comments
 (0)