Skip to content

Commit

Permalink
Merge branch 'develop' into feature/version-propagation-rework
Browse files Browse the repository at this point in the history
  • Loading branch information
thoniTUB authored May 13, 2024
2 parents 6699171 + 9de698a commit 6b46c5b
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.bakdata.conquery.sql.conversion.model.aggregator;

import java.math.BigDecimal;
import java.sql.Date;
import java.time.temporal.ChronoUnit;

import com.bakdata.conquery.models.datasets.concepts.select.concept.specific.EventDurationSumSelect;
Expand All @@ -14,6 +15,8 @@
import com.bakdata.conquery.sql.conversion.model.select.SelectContext;
import com.bakdata.conquery.sql.conversion.model.select.SqlSelects;
import lombok.Value;
import org.jooq.Condition;
import org.jooq.Field;
import org.jooq.impl.DSL;

@Value
Expand All @@ -28,29 +31,45 @@ private EventDurationSumSqlAggregator(
ConceptConversionTables tables,
SqlFunctionProvider functionProvider
) {
ColumnDateRange qualified = validityDate.qualify(tables.getPredecessor(ConceptCteStep.INTERVAL_PACKING_SELECTS));
ColumnDateRange asDualColumn = functionProvider.toDualColumn(qualified);
FieldWrapper<BigDecimal> durationSum = new FieldWrapper<>(
DSL.sum(functionProvider.dateDistance(ChronoUnit.DAYS, asDualColumn.getStart(), asDualColumn.getEnd()))
.as(alias)
);
Field<BigDecimal> durationSum = DSL.sum(
DSL.when(containsInfinityDate(validityDate, functionProvider), DSL.val(null, Integer.class))
.otherwise(functionProvider.dateDistance(ChronoUnit.DAYS, validityDate.getStart(), validityDate.getEnd()))
)
.as(alias);

ExtractingSqlSelect<?> finalSelect = durationSum.qualify(tables.getLastPredecessor());
FieldWrapper<BigDecimal> durationSumWrapper = new FieldWrapper<>(durationSum);
ExtractingSqlSelect<?> finalSelect = durationSumWrapper.qualify(tables.getLastPredecessor());

this.sqlSelects = SqlSelects.builder()
.intervalPackingSelect(durationSum)
.intervalPackingSelect(durationSumWrapper)
.finalSelect(finalSelect)
.build();
this.whereClauses = WhereClauses.builder().build();
}

public static EventDurationSumSqlAggregator create(EventDurationSumSelect eventDurationSumSelect, SelectContext selectContext) {

ColumnDateRange validityDate = selectContext.getValidityDate().orElseThrow(
() -> new IllegalStateException("Can't convert a EventDurationSum select without a validity date")
);

return new EventDurationSumSqlAggregator(
selectContext.getNameGenerator().selectName(eventDurationSumSelect),
selectContext.getValidityDate().orElseThrow(() -> new IllegalStateException("Can't convert a EventDurationSum select without a validity date")),
prepareValidityDate(validityDate, selectContext),
selectContext.getTables(),
selectContext.getConversionContext().getSqlDialect().getFunctionProvider()
);
}

private static ColumnDateRange prepareValidityDate(ColumnDateRange validityDate, SelectContext selectContext) {
ColumnDateRange qualified = validityDate.qualify(selectContext.getTables().getPredecessor(ConceptCteStep.INTERVAL_PACKING_SELECTS));
return selectContext.getSqlDialect().getFunctionProvider().toDualColumn(qualified);
}

private static Condition containsInfinityDate(ColumnDateRange validityDate, SqlFunctionProvider functionProvider) {
Field<Date> negativeInfinity = functionProvider.toDateField(functionProvider.getMinDateExpression());
Field<Date> positiveInfinity = functionProvider.toDateField(functionProvider.getMaxDateExpression());
return validityDate.getStart().eq(negativeInfinity).or(validityDate.getEnd().eq(positiveInfinity));
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.bakdata.conquery.sql.conversion.model.aggregator;

import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider;
import com.bakdata.conquery.sql.conversion.model.ColumnDateRange;
import com.bakdata.conquery.sql.conversion.model.filter.SqlFilters;
import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses;
import com.bakdata.conquery.sql.conversion.model.select.SqlSelects;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,6 @@ pid,datum,column
5,2012-01-03,"B"
5,2012-01-04,"B"
5,2012-01-05,"B"

6,,"A"
6,,"B"
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ result,dates,tree a event_duration_sum
3,{2012-01-01/2012-01-02},1
4,{2012-01-01/2012-01-02},2
5,{2012-01-01/2012-01-05},4
6,{-∞/+∞},
5 changes: 3 additions & 2 deletions frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6b46c5b

Please sign in to comment.