From 939b537a0234656d4895d78b5db7ab2552624b43 Mon Sep 17 00:00:00 2001
From: awildturtok <1553491+awildturtok@users.noreply.github.com>
Date: Thu, 4 Jan 2024 15:18:49 +0100
Subject: [PATCH 1/4] fixes accessing externalId after wrapping as object
---
.../com/bakdata/conquery/resources/admin/ui/idmapping.html.ftl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/idmapping.html.ftl b/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/idmapping.html.ftl
index b9a97a53cd..79cc206cca 100644
--- a/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/idmapping.html.ftl
+++ b/backend/src/main/resources/com/bakdata/conquery/resources/admin/ui/idmapping.html.ftl
@@ -4,7 +4,7 @@
<#list c as key, val>
${key}
- <#list val as externalIdPart>
+ <#list val.externalId as externalIdPart>
${externalIdPart}
#list>
From 03c3052d3d92e75c94f2ea97ca1ad0964a75e36a Mon Sep 17 00:00:00 2001
From: Jonas Arnhold
Date: Tue, 9 Jan 2024 12:58:20 +0100
Subject: [PATCH 2/4] Implement diffsum/distinct SumSelect/SumFilter conversion
(#3251)
---
.../concepts/filters/specific/SumFilter.java | 7 +
.../select/connector/specific/SumSelect.java | 14 ++
.../sql/conversion/NodeConversions.java | 2 +
.../cqelement/ConversionContext.java | 2 +
.../cqelement/concept/CQConceptConverter.java | 7 +-
.../cqelement/concept/ConceptCteContext.java | 8 +-
.../cqelement/concept/ConceptCteStep.java | 3 +-
.../concept/JoinPredecessorsCte.java | 46 +++++
.../dialect/HanaSqlFunctionProvider.java | 12 +-
.../dialect/PostgreSqlFunctionProvider.java | 12 +-
.../dialect/SqlFunctionProvider.java | 6 +-
.../sql/conversion/model/QueryStepJoiner.java | 4 +-
.../conversion/model/select/SqlSelects.java | 4 +
.../select/SumDistinctSqlAggregator.java | 191 ++++++++++++++++++
.../model/select/SumSqlAggregator.java | 55 +++--
.../tests/sql/filter/sum/diffsum/content.csv | 22 ++
.../sql/filter/sum/diffsum/diffsum.spec.json | 75 +++++++
.../tests/sql/filter/sum/diffsum/expected.csv | 8 +
.../tests/sql/filter/sum/distinct/content.csv | 9 +
.../sum/distinct/distinct-sum.spec.json | 76 +++++++
.../sql/filter/sum/distinct/expected.csv | 3 +
.../tests/sql/selects/sum/diffsum/content.csv | 22 ++
.../sql/selects/sum/diffsum/diffsum.spec.json | 68 +++++++
.../sql/selects/sum/diffsum/expected.csv | 13 ++
.../sql/selects/sum/distinct/content.csv | 8 +
.../sum/distinct/distinct-sum.spec.json | 69 +++++++
.../sql/selects/sum/distinct/expected.csv | 5 +
27 files changed, 715 insertions(+), 36 deletions(-)
create mode 100644 backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/JoinPredecessorsCte.java
create mode 100644 backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SumDistinctSqlAggregator.java
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/diffsum/content.csv
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/diffsum/diffsum.spec.json
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/diffsum/expected.csv
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/distinct/content.csv
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/distinct/distinct-sum.spec.json
create mode 100644 backend/src/test/resources/tests/sql/filter/sum/distinct/expected.csv
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/diffsum/content.csv
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/diffsum/diffsum.spec.json
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/diffsum/expected.csv
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/distinct/content.csv
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/distinct/distinct-sum.spec.json
create mode 100644 backend/src/test/resources/tests/sql/selects/sum/distinct/expected.csv
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
index 54f5395e62..a4edf084a6 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/filters/specific/SumFilter.java
@@ -35,6 +35,7 @@
import com.bakdata.conquery.sql.conversion.cqelement.concept.ConceptCteStep;
import com.bakdata.conquery.sql.conversion.cqelement.concept.FilterContext;
import com.bakdata.conquery.sql.conversion.model.filter.SqlFilters;
+import com.bakdata.conquery.sql.conversion.model.select.SumDistinctSqlAggregator;
import com.bakdata.conquery.sql.conversion.model.select.SumSqlAggregator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
@@ -109,11 +110,17 @@ public FilterNode createFilterNode(RANGE value) {
@Override
public SqlFilters convertToSqlFilter(FilterContext filterContext) {
+ if (distinctByColumn != null && !distinctByColumn.isEmpty()) {
+ return SumDistinctSqlAggregator.create(this, filterContext).getSqlFilters();
+ }
return SumSqlAggregator.create(this, filterContext).getSqlFilters();
}
@Override
public Set getRequiredSqlSteps() {
+ if (distinctByColumn != null && !distinctByColumn.isEmpty()) {
+ return ConceptCteStep.withOptionalSteps(ConceptCteStep.JOIN_PREDECESSORS, ConceptCteStep.AGGREGATION_FILTER);
+ }
return ConceptCteStep.withOptionalSteps(ConceptCteStep.AGGREGATION_FILTER);
}
diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/select/connector/specific/SumSelect.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/select/connector/specific/SumSelect.java
index 77903d5312..91c1708446 100644
--- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/select/connector/specific/SumSelect.java
+++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/select/connector/specific/SumSelect.java
@@ -4,6 +4,7 @@
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
+import java.util.Set;
import javax.validation.constraints.NotNull;
@@ -24,8 +25,10 @@
import com.bakdata.conquery.models.query.queryplan.aggregators.specific.sum.IntegerSumAggregator;
import com.bakdata.conquery.models.query.queryplan.aggregators.specific.sum.MoneySumAggregator;
import com.bakdata.conquery.models.query.queryplan.aggregators.specific.sum.RealSumAggregator;
+import com.bakdata.conquery.sql.conversion.cqelement.concept.ConceptCteStep;
import com.bakdata.conquery.sql.conversion.cqelement.concept.SelectContext;
import com.bakdata.conquery.sql.conversion.model.select.SqlSelects;
+import com.bakdata.conquery.sql.conversion.model.select.SumDistinctSqlAggregator;
import com.bakdata.conquery.sql.conversion.model.select.SumSqlAggregator;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -127,7 +130,18 @@ public boolean isColumnsOfSameType() {
@Override
public SqlSelects convertToSqlSelects(SelectContext selectContext) {
+ if (distinctByColumn != null && !distinctByColumn.isEmpty()) {
+ return SumDistinctSqlAggregator.create(this, selectContext).getSqlSelects();
+ }
return SumSqlAggregator.create(this, selectContext).getSqlSelects();
}
+ @Override
+ public Set getRequiredSqlSteps() {
+ if (distinctByColumn != null && !distinctByColumn.isEmpty()) {
+ return ConceptCteStep.withOptionalSteps(ConceptCteStep.JOIN_PREDECESSORS);
+ }
+ return ConceptCteStep.MANDATORY_STEPS;
+ }
+
}
diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/NodeConversions.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/NodeConversions.java
index 81b936e558..03f8e22906 100644
--- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/NodeConversions.java
+++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/NodeConversions.java
@@ -6,6 +6,7 @@
import com.bakdata.conquery.sql.conversion.cqelement.ConversionContext;
import com.bakdata.conquery.sql.conversion.dialect.SqlDialect;
import com.bakdata.conquery.sql.conversion.model.NameGenerator;
+import org.jooq.impl.DSL;
/**
* Entry point for converting {@link QueryDescription} to an SQL query.
@@ -27,6 +28,7 @@ public ConversionContext convert(QueryDescription queryDescription) {
.nameGenerator(new NameGenerator(config.getDialect().getNameMaxLength()))
.nodeConversions(this)
.sqlDialect(this.dialect)
+ .primaryColumn(DSL.field(DSL.name(config.getPrimaryColumn())))
.build();
return convert(queryDescription, initialCtx);
}
diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/ConversionContext.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/ConversionContext.java
index b2f991a3c8..39aa1e89c2 100644
--- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/ConversionContext.java
+++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/ConversionContext.java
@@ -14,6 +14,7 @@
import lombok.Singular;
import lombok.Value;
import lombok.With;
+import org.jooq.Field;
@Value
@With
@@ -27,6 +28,7 @@ public class ConversionContext implements Context {
@Singular
List querySteps;
SqlQuery finalQuery;
+ Field