From a4456bc7bd84d7a96436f6e2c870393f902c3b4b Mon Sep 17 00:00:00 2001 From: Kai Rollmann Date: Mon, 13 May 2024 11:28:21 +0200 Subject: [PATCH 1/2] Run npm audit fix --- frontend/package-lock.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8e86b137b3..4e5a1879be 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8167,9 +8167,10 @@ "license": "MIT" }, "node_modules/ejs": { - "version": "3.1.9", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, From 9de698aeb67495ae9274bb822436b0becfdbd132 Mon Sep 17 00:00:00 2001 From: Jonas Arnhold Date: Mon, 13 May 2024 12:32:51 +0200 Subject: [PATCH 2/2] Fix duration sum for infinity dates (#3430) --- .../EventDurationSumSqlAggregator.java | 37 ++++++++++++++----- .../model/aggregator/SqlAggregator.java | 2 + .../sql/selects/sum/duration_sum/content.csv | 3 ++ .../sql/selects/sum/duration_sum/expected.csv | 1 + 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/EventDurationSumSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/EventDurationSumSqlAggregator.java index ea363e3a39..62409f4850 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/EventDurationSumSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/EventDurationSumSqlAggregator.java @@ -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; @@ -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 @@ -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 durationSum = new FieldWrapper<>( - DSL.sum(functionProvider.dateDistance(ChronoUnit.DAYS, asDualColumn.getStart(), asDualColumn.getEnd())) - .as(alias) - ); + Field 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 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 negativeInfinity = functionProvider.toDateField(functionProvider.getMinDateExpression()); + Field positiveInfinity = functionProvider.toDateField(functionProvider.getMaxDateExpression()); + return validityDate.getStart().eq(negativeInfinity).or(validityDate.getEnd().eq(positiveInfinity)); + } + } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/SqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/SqlAggregator.java index f79ed962a5..81fb9d6c67 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/SqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/aggregator/SqlAggregator.java @@ -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; diff --git a/backend/src/test/resources/tests/sql/selects/sum/duration_sum/content.csv b/backend/src/test/resources/tests/sql/selects/sum/duration_sum/content.csv index dda9eaa270..f70ad54470 100644 --- a/backend/src/test/resources/tests/sql/selects/sum/duration_sum/content.csv +++ b/backend/src/test/resources/tests/sql/selects/sum/duration_sum/content.csv @@ -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" diff --git a/backend/src/test/resources/tests/sql/selects/sum/duration_sum/expected.csv b/backend/src/test/resources/tests/sql/selects/sum/duration_sum/expected.csv index 403d444e82..9d58b233f6 100644 --- a/backend/src/test/resources/tests/sql/selects/sum/duration_sum/expected.csv +++ b/backend/src/test/resources/tests/sql/selects/sum/duration_sum/expected.csv @@ -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,{-∞/+∞},