Skip to content

Commit

Permalink
dont min/max when ungrouped
Browse files Browse the repository at this point in the history
  • Loading branch information
awildturtok committed Nov 11, 2024
1 parent 6f4cd6a commit 98f5902
Showing 1 changed file with 17 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,8 @@ public void calculateMatchingStats(final TreeConcept treeConcept) {
.collect(Collectors.toList());

// if there is no validity date at all, we select no field
final Field<?> validityDateExpression = validityDateMap.isEmpty() ? noField() : toValidityDateExpression(validityDateMap);

final Field<?> validityDateExpression = toValidityDateExpression(validityDateMap, !relevantColumns.isEmpty());

final SelectJoinStep<Record> query = dslContext.select(relevantColumnsAliased)
.select(
Expand Down Expand Up @@ -290,11 +291,24 @@ private Condition toJooqCondition(final Connector connector, CTCondition childCo
/**
* Select the minimum of the least start date and the maximum of the greatest end date of all validity dates of all connectors.
*/
private Field<String> toValidityDateExpression(final Map<Connector, List<ColumnDateRange>> validityDateMap) {
private Field<String> toValidityDateExpression(final Map<Connector, List<ColumnDateRange>> validityDateMap, boolean grouped) {
if (validityDateMap.isEmpty()){
return noField(String.class);
}

final List<ColumnDateRange> validityDates = validityDateMap.values().stream().flatMap(List::stream).map(functionProvider::toDualColumn).toList();
final List<Field<Date>> allStarts = validityDates.stream().map(ColumnDateRange::getStart).toList();
final List<Field<Date>> allEnds = validityDates.stream().map(ColumnDateRange::getEnd).toList();
final ColumnDateRange minAndMax = ColumnDateRange.of(min(functionProvider.least(allStarts)), max(functionProvider.greatest((allEnds))));

final ColumnDateRange minAndMax;

if (grouped){
minAndMax = ColumnDateRange.of(min(functionProvider.least(allStarts)), max(functionProvider.greatest((allEnds))));
}
else {
minAndMax = ColumnDateRange.of(functionProvider.least(allStarts), functionProvider.greatest(allEnds));
}

return functionProvider.daterangeStringExpression(minAndMax);
}

Expand Down

0 comments on commit 98f5902

Please sign in to comment.