From 073eb50b1ce9385bf1c896aef4c950605b5e3963 Mon Sep 17 00:00:00 2001 From: Jonas Arnhold Date: Mon, 11 Dec 2023 10:22:58 +0100 Subject: [PATCH 1/5] Rename Filters into WhereClauses --- .../query/concept/filter/FilterValue.java | 8 +++--- .../concept/AggregationFilterCte.java | 6 ++-- .../cqelement/concept/CQConceptConverter.java | 8 +++--- .../cqelement/concept/EventFilterCte.java | 6 ++-- .../cqelement/concept/SelectFilterUtil.java | 15 ++++------ .../{FilterType.java => ConditionType.java} | 2 +- .../model/filter/ConditionUtil.java | 8 +++--- .../model/filter/CountCondition.java | 4 +-- .../model/filter/DateDistanceCondition.java | 4 +-- .../filter/DateRestrictionCondition.java | 6 ++-- .../sql/conversion/model/filter/Filters.java | 25 ----------------- .../model/filter/InvertedCondition.java | 8 +++--- .../model/filter/MultiSelectCondition.java | 8 +++--- .../model/filter/NumberCondition.java | 4 +-- .../model/filter/RangeCondition.java | 2 +- .../conversion/model/filter/SqlFilters.java | 2 +- .../conversion/model/filter/SumCondition.java | 4 +-- .../conversion/model/filter/WhereClauses.java | 28 +++++++++++++++++++ ...lterCondition.java => WhereCondition.java} | 6 ++-- ...rapper.java => WhereConditionWrapper.java} | 6 ++-- .../model/select/CountSqlAggregator.java | 16 +++++------ .../select/DateDistanceSqlAggregator.java | 17 ++++++----- .../model/select/ExistsSqlAggregator.java | 6 ++-- .../model/select/FirstValueSqlAggregator.java | 6 ++-- .../model/select/LastValueSqlAggregator.java | 6 ++-- .../model/select/NumberSqlAggregator.java | 10 +++---- .../select/RandomValueSqlAggregator.java | 6 ++-- .../model/select/SqlAggregator.java | 6 ++-- .../model/select/SumSqlAggregator.java | 13 ++++----- 29 files changed, 121 insertions(+), 125 deletions(-) rename backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/{FilterType.java => ConditionType.java} (73%) delete mode 100644 backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/Filters.java create mode 100644 backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereClauses.java rename backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/{FilterCondition.java => WhereCondition.java} (64%) rename backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/{FilterConditionWrapper.java => WhereConditionWrapper.java} (67%) diff --git a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java index 22bcf6e2f4..7a61a7c205 100644 --- a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java +++ b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java @@ -71,13 +71,13 @@ public FilterNode createNode() { return getFilter().createFilterNode(getValue()); } - public SqlFilters convertToSqlFilter(ConversionContext context, SqlTables conceptTables) { + public SqlFilters convertToSqlFilters(ConversionContext context, SqlTables conceptTables) { FilterContext filterContext = new FilterContext<>(value, context, conceptTables); - SqlFilters sqlFilters = filter.convertToSqlFilter(filterContext); + SqlFilters SqlFilters = filter.convertToSqlFilter(filterContext); if (context.isNegation()) { - return new SqlFilters(sqlFilters.getSelects(), sqlFilters.getFilters().negated()); + return new SqlFilters(SqlFilters.getSelects(), SqlFilters.getWhereClauses().negated()); } - return sqlFilters; + return SqlFilters; } @NoArgsConstructor diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/AggregationFilterCte.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/AggregationFilterCte.java index 2e2fededac..27c31d265f 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/AggregationFilterCte.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/AggregationFilterCte.java @@ -4,7 +4,7 @@ import com.bakdata.conquery.sql.conversion.model.QueryStep; import com.bakdata.conquery.sql.conversion.model.Selects; -import com.bakdata.conquery.sql.conversion.model.filter.FilterCondition; +import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.sql.conversion.model.select.SqlSelect; import org.jooq.Condition; @@ -21,8 +21,8 @@ public QueryStep.QueryStepBuilder convertStep(ConceptCteContext conceptCteContex .qualify(predecessorTableName); List aggregationFilterConditions = conceptCteContext.getFilters().stream() - .flatMap(conceptFilter -> conceptFilter.getFilters().getGroup().stream()) - .map(FilterCondition::filterCondition) + .flatMap(conceptFilter -> conceptFilter.getWhereClauses().getGroupFilters().stream()) + .map(WhereCondition::filterCondition) .toList(); return QueryStep.builder() diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java index 3773d24267..79946fd137 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java @@ -15,10 +15,10 @@ import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.ColumnDateRange; import com.bakdata.conquery.sql.conversion.model.QueryStep; +import com.bakdata.conquery.sql.conversion.model.filter.ConditionType; import com.bakdata.conquery.sql.conversion.model.filter.ConditionUtil; -import com.bakdata.conquery.sql.conversion.model.filter.FilterType; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; 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.FieldWrapper; import com.bakdata.conquery.sql.conversion.model.select.SqlSelect; import com.bakdata.conquery.sql.conversion.model.select.SqlSelects; @@ -82,7 +82,7 @@ private ConceptCteContext createConceptCteContext(CQConcept node, ConversionCont // convert filters Stream conceptFilters = table.getFilters().stream() - .map(filterValue -> filterValue.convertToSqlFilter(context, conceptTables)); + .map(filterValue -> filterValue.convertToSqlFilters(context, conceptTables)); Stream dateRestrictionFilter = getDateRestriction(context, validityDateSelect).stream(); List allFilters = Stream.concat(conceptFilters, dateRestrictionFilter).toList(); @@ -154,7 +154,7 @@ private Optional getDateRestriction(ConversionContext context, Optio return Optional.of(new SqlFilters( SqlSelects.builder().preprocessingSelects(dateRestrictionSelects).build(), - Filters.builder().event(List.of(ConditionUtil.wrap(dateRestrictionCondition, FilterType.EVENT))).build() + WhereClauses.builder().eventFilter(ConditionUtil.wrap(dateRestrictionCondition, ConditionType.EVENT)).build() )); } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/EventFilterCte.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/EventFilterCte.java index cd1846c031..5a2b61dda2 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/EventFilterCte.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/EventFilterCte.java @@ -6,7 +6,7 @@ import com.bakdata.conquery.sql.conversion.model.ColumnDateRange; import com.bakdata.conquery.sql.conversion.model.QueryStep; import com.bakdata.conquery.sql.conversion.model.Selects; -import com.bakdata.conquery.sql.conversion.model.filter.FilterCondition; +import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.sql.conversion.model.select.SqlSelect; import org.jooq.Condition; @@ -16,8 +16,8 @@ class EventFilterCte extends ConceptCte { public QueryStep.QueryStepBuilder convertStep(ConceptCteContext conceptCteContext) { Selects eventFilterSelects = getEventFilterSelects(conceptCteContext); List eventFilterConditions = conceptCteContext.getFilters().stream() - .flatMap(conceptFilter -> conceptFilter.getFilters().getEvent().stream()) - .map(FilterCondition::filterCondition) + .flatMap(conceptFilter -> conceptFilter.getWhereClauses().getEventFilters().stream()) + .map(WhereCondition::filterCondition) .toList(); return QueryStep.builder() .selects(eventFilterSelects) diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/SelectFilterUtil.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/SelectFilterUtil.java index f613f5eb6f..20931e7425 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/SelectFilterUtil.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/SelectFilterUtil.java @@ -1,10 +1,8 @@ package com.bakdata.conquery.sql.conversion.cqelement.concept; -import java.util.List; - import com.bakdata.conquery.models.datasets.concepts.filters.specific.SelectFilter; -import com.bakdata.conquery.sql.conversion.model.filter.FilterCondition; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import com.bakdata.conquery.sql.conversion.model.filter.MultiSelectCondition; import com.bakdata.conquery.sql.conversion.model.filter.SqlFilters; import com.bakdata.conquery.sql.conversion.model.select.ExtractingSqlSelect; @@ -13,14 +11,13 @@ public class SelectFilterUtil { public static SqlFilters convert(SelectFilter selectFilter, FilterContext context, String[] values) { - ExtractingSqlSelect rootSelect = new ExtractingSqlSelect<>( context.getConceptTables().getPredecessor(ConceptCteStep.PREPROCESSING), selectFilter.getColumn().getName(), String.class ); - FilterCondition condition = new MultiSelectCondition( + WhereCondition condition = new MultiSelectCondition( context.getConceptTables().qualifyOnPredecessor(ConceptCteStep.EVENT_FILTER, rootSelect.aliased()), values, context.getParentContext().getSqlDialect().getFunctionProvider() @@ -30,9 +27,9 @@ public static SqlFilters convert(SelectFilter selectFilter, FilterContext SqlSelects.builder() .preprocessingSelect(rootSelect) .build(), - Filters.builder() - .event(List.of(condition)) - .build() + WhereClauses.builder() + .eventFilter(condition) + .build() ); } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterType.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionType.java similarity index 73% rename from backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterType.java rename to backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionType.java index fa8502b7a0..78035a4d87 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterType.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionType.java @@ -1,6 +1,6 @@ package com.bakdata.conquery.sql.conversion.model.filter; -public enum FilterType { +public enum ConditionType { EVENT, GROUP } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java index 2e7b358611..5bbbd125eb 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java @@ -21,12 +21,12 @@ public Condition rangeCondition(final Field column, final IRange range) } /** - * Use if you want to wrap a {@link Condition} without implementing a {@link FilterCondition} in an own class. + * Use if you want to wrap a {@link Condition} without implementing a {@link WhereCondition} in an own class. * - * @return A {@link FilterCondition} instance encapsulating the provided condition and type. + * @return A {@link WhereCondition} instance encapsulating the provided condition and type. */ - public FilterCondition wrap(final Condition condition, final FilterType type) { - return new FilterConditionWrapper(condition, type); + public WhereCondition wrap(final Condition condition, final ConditionType type) { + return new WhereConditionWrapper(condition, type); } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/CountCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/CountCondition.java index 10132cc273..728aafee2b 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/CountCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/CountCondition.java @@ -10,8 +10,8 @@ public CountCondition(Field column, IRange range) { } @Override - public FilterType type() { - return FilterType.GROUP; + public ConditionType type() { + return ConditionType.GROUP; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateDistanceCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateDistanceCondition.java index f34d1f8a6d..5344330c16 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateDistanceCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateDistanceCondition.java @@ -10,8 +10,8 @@ public DateDistanceCondition(Field column, Range.LongRange range) { } @Override - public FilterType type() { - return FilterType.EVENT; + public ConditionType type() { + return ConditionType.EVENT; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateRestrictionCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateRestrictionCondition.java index f0678fcba5..b7f6d20aab 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateRestrictionCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/DateRestrictionCondition.java @@ -6,7 +6,7 @@ import org.jooq.Condition; @RequiredArgsConstructor -public class DateRestrictionCondition implements FilterCondition { +public class DateRestrictionCondition implements WhereCondition { private final SqlFunctionProvider functionProvider; private final ColumnDateRange dateRestriction; @@ -18,8 +18,8 @@ public Condition filterCondition() { } @Override - public FilterType type() { - return FilterType.EVENT; + public ConditionType type() { + return ConditionType.EVENT; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/Filters.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/Filters.java deleted file mode 100644 index c7e333e3eb..0000000000 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/Filters.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.bakdata.conquery.sql.conversion.model.filter; - -import java.util.Collections; -import java.util.List; - -import lombok.Builder; -import lombok.Value; - -@Builder -@Value -public class Filters { - - @Builder.Default - List event = Collections.emptyList(); - @Builder.Default - List group = Collections.emptyList(); - - public Filters negated() { - return new Filters( - event.stream().map(FilterCondition::negate).toList(), - group.stream().map(FilterCondition::negate).toList() - ); - } - -} diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/InvertedCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/InvertedCondition.java index d0257118c6..6ae22eddcb 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/InvertedCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/InvertedCondition.java @@ -5,9 +5,9 @@ import org.jooq.impl.DSL; @RequiredArgsConstructor -public class InvertedCondition implements FilterCondition { +public class InvertedCondition implements WhereCondition { - private final FilterCondition filterCondition; + private final WhereCondition filterCondition; @Override public Condition filterCondition() { @@ -15,12 +15,12 @@ public Condition filterCondition() { } @Override - public FilterType type() { + public ConditionType type() { return filterCondition.type(); } @Override - public FilterCondition negate() { + public WhereCondition negate() { return filterCondition; } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/MultiSelectCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/MultiSelectCondition.java index 309b4efd07..50b51bbab3 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/MultiSelectCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/MultiSelectCondition.java @@ -10,14 +10,14 @@ import org.jooq.impl.DSL; @RequiredArgsConstructor -public class MultiSelectCondition implements FilterCondition { +public class MultiSelectCondition implements WhereCondition { private final Field column; private final String[] values; private final SqlFunctionProvider functionProvider; @Override - public FilterCondition negate() { + public WhereCondition negate() { // we want all entries that don't satisfy a condition - because in SQL a comparison with NULL equals UNKNOWN and not FALSE, // we need to check if the entry is NULL or does not fulfil the condition Condition valueIsNull = column.isNull(); @@ -41,8 +41,8 @@ public Condition filterCondition() { } @Override - public FilterType type() { - return FilterType.EVENT; + public ConditionType type() { + return ConditionType.EVENT; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/NumberCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/NumberCondition.java index 5e9daea62b..169ead8af7 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/NumberCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/NumberCondition.java @@ -10,8 +10,8 @@ public NumberCondition(Field column, IRange column; private final IRange range; diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SqlFilters.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SqlFilters.java index b2d6059aea..99d1b402c1 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SqlFilters.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SqlFilters.java @@ -6,5 +6,5 @@ @Value public class SqlFilters { SqlSelects selects; - Filters filters; + WhereClauses whereClauses; } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SumCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SumCondition.java index 6f1e3e26bf..1159b87343 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SumCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/SumCondition.java @@ -10,8 +10,8 @@ public SumCondition(Field column, IRange } @Override - public FilterType type() { - return FilterType.GROUP; + public ConditionType type() { + return ConditionType.GROUP; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereClauses.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereClauses.java new file mode 100644 index 0000000000..052994a391 --- /dev/null +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereClauses.java @@ -0,0 +1,28 @@ +package com.bakdata.conquery.sql.conversion.model.filter; + +import java.util.List; + +import lombok.Builder; +import lombok.Singular; +import lombok.Value; + +@Builder +@Value +public class WhereClauses { + + @Singular + List preprocessingConditions; + @Singular + List eventFilters; + @Singular + List groupFilters; + + public WhereClauses negated() { + return new WhereClauses( + preprocessingConditions.stream().map(WhereCondition::negate).toList(), + eventFilters.stream().map(WhereCondition::negate).toList(), + groupFilters.stream().map(WhereCondition::negate).toList() + ); + } + +} diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereCondition.java similarity index 64% rename from backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterCondition.java rename to backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereCondition.java index 21e19512c4..bb9cd531f5 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereCondition.java @@ -2,13 +2,13 @@ import org.jooq.Condition; -public interface FilterCondition { +public interface WhereCondition { Condition filterCondition(); - FilterType type(); + ConditionType type(); - default FilterCondition negate() { + default WhereCondition negate() { return new InvertedCondition(this); } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterConditionWrapper.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereConditionWrapper.java similarity index 67% rename from backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterConditionWrapper.java rename to backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereConditionWrapper.java index 74bb1f175f..5dc17d1b3c 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/FilterConditionWrapper.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/WhereConditionWrapper.java @@ -4,10 +4,10 @@ import org.jooq.Condition; @Value -public class FilterConditionWrapper implements FilterCondition { +public class WhereConditionWrapper implements WhereCondition { Condition condition; - FilterType type; + ConditionType type; @Override public Condition filterCondition() { @@ -15,7 +15,7 @@ public Condition filterCondition() { } @Override - public FilterType type() { + public ConditionType type() { return type; } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/CountSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/CountSqlAggregator.java index a9b5834790..ebca23ea47 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/CountSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/CountSqlAggregator.java @@ -1,7 +1,5 @@ package com.bakdata.conquery.sql.conversion.model.select; -import java.util.List; - import com.bakdata.conquery.models.common.IRange; import com.bakdata.conquery.models.common.Range; import com.bakdata.conquery.models.datasets.Column; @@ -12,8 +10,8 @@ import com.bakdata.conquery.sql.conversion.cqelement.concept.SelectContext; import com.bakdata.conquery.sql.conversion.model.SqlTables; import com.bakdata.conquery.sql.conversion.model.filter.CountCondition; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; import com.bakdata.conquery.sql.conversion.model.filter.SqlFilters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import lombok.Value; import org.jooq.Field; import org.jooq.impl.DSL; @@ -23,7 +21,7 @@ public class CountSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private CountSqlAggregator( Column countColumn, @@ -51,15 +49,15 @@ private CountSqlAggregator( if (filterValue == null) { ExtractingSqlSelect finalSelect = countGroupBy.createAliasedReference(conceptTables.getPredecessor(ConceptCteStep.FINAL)); this.sqlSelects = builder.finalSelect(finalSelect).build(); - this.filters = null; + this.whereClauses = null; } else { this.sqlSelects = builder.build(); Field qualifiedCountSelect = countGroupBy.createAliasedReference(conceptTables.getPredecessor(ConceptCteStep.AGGREGATION_FILTER)).select(); CountCondition countCondition = new CountCondition(qualifiedCountSelect, filterValue); - this.filters = Filters.builder() - .group(List.of(countCondition)) - .build(); + this.whereClauses = WhereClauses.builder() + .groupFilter(countCondition) + .build(); } } @@ -85,7 +83,7 @@ public static CountSqlAggregator create(CountFilter countFilter, FilterContext qualifiedDateDistanceSelect = dateDistanceSelect.createAliasedReference(conceptTables.getPredecessor(ConceptCteStep.EVENT_FILTER)).select(); - FilterCondition dateDistanceCondition = new DateDistanceCondition(qualifiedDateDistanceSelect, filterValue); - this.filters = Filters.builder() - .event(List.of(dateDistanceCondition)) - .build(); + WhereCondition dateDistanceCondition = new DateDistanceCondition(qualifiedDateDistanceSelect, filterValue); + this.whereClauses = WhereClauses.builder() + .eventFilter(dateDistanceCondition) + .build(); } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/ExistsSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/ExistsSqlAggregator.java index 35f8f3f849..0cc16db411 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/ExistsSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/ExistsSqlAggregator.java @@ -2,7 +2,7 @@ import com.bakdata.conquery.models.datasets.concepts.select.concept.specific.ExistsSelect; import com.bakdata.conquery.sql.conversion.cqelement.concept.SelectContext; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import lombok.Value; import org.jooq.impl.DSL; @@ -10,14 +10,14 @@ public class ExistsSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private ExistsSqlAggregator(String alias) { FieldWrapper existsSelect = new UniversalSqlSelect<>(DSL.field("1", Integer.class).as(alias)); this.sqlSelects = SqlSelects.builder() .finalSelect(existsSelect) .build(); - this.filters = Filters.builder().build(); + this.whereClauses = WhereClauses.builder().build(); } public static ExistsSqlAggregator create(ExistsSelect existsSelect, SelectContext selectContext) { diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/FirstValueSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/FirstValueSqlAggregator.java index 9bcf4e3f35..25490e0566 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/FirstValueSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/FirstValueSqlAggregator.java @@ -11,7 +11,7 @@ import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.ColumnDateRange; import com.bakdata.conquery.sql.conversion.model.SqlTables; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import lombok.Value; import org.jooq.Field; @@ -19,7 +19,7 @@ public class FirstValueSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private FirstValueSqlAggregator( Column column, @@ -47,7 +47,7 @@ private FirstValueSqlAggregator( .finalSelect(finalSelect) .build(); - this.filters = Filters.builder().build(); + this.whereClauses = WhereClauses.builder().build(); } public static FirstValueSqlAggregator create(FirstValueSelect firstValueSelect, SelectContext selectContext) { diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/LastValueSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/LastValueSqlAggregator.java index c644db01d0..9844f9bd51 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/LastValueSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/LastValueSqlAggregator.java @@ -11,7 +11,7 @@ import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.ColumnDateRange; import com.bakdata.conquery.sql.conversion.model.SqlTables; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import lombok.Value; import org.jooq.Field; @@ -19,7 +19,7 @@ public class LastValueSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private LastValueSqlAggregator( Column column, @@ -47,7 +47,7 @@ private LastValueSqlAggregator( .finalSelect(finalSelect) .build(); - this.filters = Filters.builder().build(); + this.whereClauses = WhereClauses.builder().build(); } public static LastValueSqlAggregator create(LastValueSelect lastValueSelect, SelectContext selectContext) { diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/NumberSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/NumberSqlAggregator.java index f2976963a8..ca979d68c5 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/NumberSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/NumberSqlAggregator.java @@ -12,7 +12,7 @@ import com.bakdata.conquery.sql.conversion.cqelement.concept.FilterContext; import com.bakdata.conquery.sql.conversion.cqelement.concept.NumberMapUtil; import com.bakdata.conquery.sql.conversion.model.SqlTables; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import com.bakdata.conquery.sql.conversion.model.filter.NumberCondition; import lombok.Value; import org.jooq.Field; @@ -21,7 +21,7 @@ public class NumberSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; public NumberSqlAggregator( Column column, @@ -42,9 +42,9 @@ public NumberSqlAggregator( this.sqlSelects = SqlSelects.builder() .preprocessingSelects(List.of(rootSelect)) .build(); - this.filters = Filters.builder() - .event(List.of(condition)) - .build(); + this.whereClauses = WhereClauses.builder() + .eventFilter(condition) + .build(); } public static NumberSqlAggregator create( diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/RandomValueSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/RandomValueSqlAggregator.java index 6cb011e46a..11b17022fa 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/RandomValueSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/RandomValueSqlAggregator.java @@ -6,7 +6,7 @@ import com.bakdata.conquery.sql.conversion.cqelement.concept.SelectContext; import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.SqlTables; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import lombok.Value; import org.jooq.Field; @@ -14,7 +14,7 @@ public class RandomValueSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private RandomValueSqlAggregator( Column column, @@ -37,7 +37,7 @@ private RandomValueSqlAggregator( .finalSelect(finalSelect) .build(); - this.filters = Filters.builder().build(); + this.whereClauses = WhereClauses.builder().build(); } public static RandomValueSqlAggregator create(RandomValueSelect randomValueSelect, SelectContext selectContext) { diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SqlAggregator.java index dea6b1b604..46d624d89e 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SqlAggregator.java @@ -1,16 +1,16 @@ package com.bakdata.conquery.sql.conversion.model.select; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; import com.bakdata.conquery.sql.conversion.model.filter.SqlFilters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; public interface SqlAggregator { SqlSelects getSqlSelects(); - Filters getFilters(); + WhereClauses getWhereClauses(); default SqlFilters getSqlFilters() { - return new SqlFilters(getSqlSelects(), getFilters()); + return new SqlFilters(getSqlSelects(), getWhereClauses()); } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SumSqlAggregator.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SumSqlAggregator.java index cfe972e806..fb5d5822e3 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SumSqlAggregator.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/select/SumSqlAggregator.java @@ -1,7 +1,6 @@ package com.bakdata.conquery.sql.conversion.model.select; import java.math.BigDecimal; -import java.util.List; import com.bakdata.conquery.models.common.IRange; import com.bakdata.conquery.models.datasets.Column; @@ -12,7 +11,7 @@ import com.bakdata.conquery.sql.conversion.cqelement.concept.NumberMapUtil; import com.bakdata.conquery.sql.conversion.cqelement.concept.SelectContext; import com.bakdata.conquery.sql.conversion.model.SqlTables; -import com.bakdata.conquery.sql.conversion.model.filter.Filters; +import com.bakdata.conquery.sql.conversion.model.filter.WhereClauses; import com.bakdata.conquery.sql.conversion.model.filter.SumCondition; import lombok.Value; import org.jooq.Field; @@ -22,7 +21,7 @@ public class SumSqlAggregator implements SqlAggregator { SqlSelects sqlSelects; - Filters filters; + WhereClauses whereClauses; private SumSqlAggregator( Column sumColumn, @@ -49,15 +48,15 @@ private SumSqlAggregator( if (filterValue == null) { ExtractingSqlSelect finalSelect = sumGroupBy.createAliasedReference(conceptTables.getPredecessor(ConceptCteStep.FINAL)); this.sqlSelects = builder.finalSelect(finalSelect).build(); - this.filters = null; + this.whereClauses = null; } else { this.sqlSelects = builder.build(); Field qualifiedSumGroupBy = sumGroupBy.createAliasedReference(conceptTables.getPredecessor(ConceptCteStep.AGGREGATION_FILTER)).select(); SumCondition sumCondition = new SumCondition(qualifiedSumGroupBy, filterValue); - this.filters = Filters.builder() - .group(List.of(sumCondition)) - .build(); + this.whereClauses = WhereClauses.builder() + .groupFilter(sumCondition) + .build(); } } From 01bba156264c2ce51a75908475ee872dd730106e Mon Sep 17 00:00:00 2001 From: Jonas Arnhold Date: Sat, 9 Dec 2023 15:04:06 +0100 Subject: [PATCH 2/5] Implement concept condition SQL conversion --- .../query/concept/filter/FilterValue.java | 8 +- .../models/datasets/concepts/Connector.java | 4 + .../concepts/conditions/AndCondition.java | 30 +- .../concepts/conditions/CTCondition.java | 5 + .../conditions/ColumnEqualCondition.java | 13 +- .../concepts/conditions/EqualCondition.java | 15 +- .../concepts/conditions/GroovyCondition.java | 7 + .../conditions/IsPresentCondition.java | 14 +- .../concepts/conditions/NotCondition.java | 8 + .../concepts/conditions/OrCondition.java | 34 +- .../concepts/conditions/PrefixCondition.java | 30 +- .../conditions/PrefixRangeCondition.java | 34 +- .../concept/AggregationFilterCte.java | 2 +- .../cqelement/concept/CQConceptConverter.java | 72 +++- .../cqelement/concept/CTConditionContext.java | 24 ++ .../cqelement/concept/EventFilterCte.java | 2 +- .../cqelement/concept/PreprocessingCte.java | 9 + .../dialect/HanaSqlFunctionProvider.java | 5 + .../dialect/PostgreSqlFunctionProvider.java | 5 + .../dialect/SqlFunctionProvider.java | 2 + .../model/filter/ConditionType.java | 1 + .../filter/DateRestrictionCondition.java | 2 +- .../model/filter/InvertedCondition.java | 4 +- .../model/filter/MultiSelectCondition.java | 4 +- .../model/filter/RangeCondition.java | 2 +- .../model/filter/WhereCondition.java | 2 +- .../model/filter/WhereConditionWrapper.java | 2 +- .../tests/sql/tree/complex/complex.spec.json | 110 ++++++ .../tests/sql/tree/complex/content.csv | 5 + .../tests/sql/tree/complex/expected.csv | 2 + .../tests/sql/tree/prefix_range/expected.csv | 2 + .../sql/tree/prefix_range/kh-content.csv | 2 + .../tree/prefix_range/prefix_range.spec.json | 333 ++++++++++++++++++ .../tests/sql/tree/simple/content.csv | 5 + .../tests/sql/tree/simple/expected.csv | 3 + .../tests/sql/tree/simple/simple.spec.json | 81 +++++ 36 files changed, 829 insertions(+), 54 deletions(-) create mode 100644 backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CTConditionContext.java create mode 100644 backend/src/test/resources/tests/sql/tree/complex/complex.spec.json create mode 100644 backend/src/test/resources/tests/sql/tree/complex/content.csv create mode 100644 backend/src/test/resources/tests/sql/tree/complex/expected.csv create mode 100644 backend/src/test/resources/tests/sql/tree/prefix_range/expected.csv create mode 100644 backend/src/test/resources/tests/sql/tree/prefix_range/kh-content.csv create mode 100644 backend/src/test/resources/tests/sql/tree/prefix_range/prefix_range.spec.json create mode 100644 backend/src/test/resources/tests/sql/tree/simple/content.csv create mode 100644 backend/src/test/resources/tests/sql/tree/simple/expected.csv create mode 100644 backend/src/test/resources/tests/sql/tree/simple/simple.spec.json diff --git a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java index 7a61a7c205..2b78b8cbb4 100644 --- a/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java +++ b/backend/src/main/java/com/bakdata/conquery/apiv1/query/concept/filter/FilterValue.java @@ -71,13 +71,13 @@ public FilterNode createNode() { return getFilter().createFilterNode(getValue()); } - public SqlFilters convertToSqlFilters(ConversionContext context, SqlTables conceptTables) { + public SqlFilters convertToSqlFilter(ConversionContext context, SqlTables conceptTables) { FilterContext filterContext = new FilterContext<>(value, context, conceptTables); - SqlFilters SqlFilters = filter.convertToSqlFilter(filterContext); + SqlFilters sqlFilters = filter.convertToSqlFilter(filterContext); if (context.isNegation()) { - return new SqlFilters(SqlFilters.getSelects(), SqlFilters.getWhereClauses().negated()); + return new SqlFilters(sqlFilters.getSelects(), sqlFilters.getWhereClauses().negated()); } - return SqlFilters; + return sqlFilters; } @NoArgsConstructor diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/Connector.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/Connector.java index 90ae303a4b..c55355d0cc 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/Connector.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/Connector.java @@ -14,6 +14,7 @@ import com.bakdata.conquery.models.datasets.Column; import com.bakdata.conquery.models.datasets.Dataset; import com.bakdata.conquery.models.datasets.Table; +import com.bakdata.conquery.models.datasets.concepts.conditions.CTCondition; import com.bakdata.conquery.models.datasets.concepts.filters.Filter; import com.bakdata.conquery.models.datasets.concepts.select.Select; import com.bakdata.conquery.models.identifiable.IdMap; @@ -88,6 +89,9 @@ public Collection> getFilters() { @CheckForNull public abstract Column getColumn(); + @CheckForNull + public abstract CTCondition getCondition(); + @JsonIgnore public List