Skip to content

Commit

Permalink
cleanup money (#3535)
Browse files Browse the repository at this point in the history
* restructures ResultType and decouples printing into ResultPrinters:
  - ResultType is now very simple mix of primitive enum and LIST. (We hope to remove even more logic from it)
  - Result printing was always weird with Mappings embedded in StringT. We've moved that responsibility into ResultInfo via SelectResultInfo for mapped Selects.
  - This PR opens the possibility to embed anonymization into the ResultInfo.
  - PrintSettings now caches the C10n calls as they were before that sometimes invoked per cell, which should make rendering faster.
* Reworks Printers:
  - We inject the result specific Printers using the printerFactory. This untangles the burden of formatting.
  - Now a Select claiming to produce a specific type only needs to guarantee they are in a format capable of being handled by the printers it elects to use: This allows us later to make a printer that alters the result before printing it, without having to inject into all renderers.

* reworks Money to no longer be "cent" based and instead just use it as storage primitive. Is now BigDecimal
  - pull default for decimalShift from CurrencyConfig
  • Loading branch information
awildturtok authored Oct 2, 2024
1 parent 4a10e08 commit 23b76fd
Show file tree
Hide file tree
Showing 127 changed files with 2,568 additions and 2,481 deletions.
97 changes: 69 additions & 28 deletions backend/src/main/java/com/bakdata/conquery/ResultHeaders.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,64 +9,105 @@
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.resultinfo.FixedLabelResultInfo;
import com.bakdata.conquery.models.query.resultinfo.ResultInfo;
import com.bakdata.conquery.models.query.resultinfo.printers.ResultPrinters;
import com.bakdata.conquery.models.query.resultinfo.printers.Printer;
import com.bakdata.conquery.models.query.resultinfo.printers.PrinterFactory;
import com.bakdata.conquery.models.query.resultinfo.printers.common.LocalizedEnumPrinter;
import com.bakdata.conquery.models.types.ResultType;
import com.bakdata.conquery.models.types.SemanticType;
import lombok.experimental.UtilityClass;

@UtilityClass
public class ResultHeaders {
public static ResultInfo datesInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).dates();
public static ResultInfo datesInfo() {

final ResultType.ListT<Object> type = new ResultType.ListT<>(ResultType.Primitive.DATE_RANGE);

return new FixedLabelResultInfo(label, label, type, Set.of(new SemanticType.EventDateT()), settings, ResultPrinters.printerFor(type, settings));
return new FixedLabelResultInfo(type, Set.of(new SemanticType.EventDateT())){
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).dates();
}
};
}

public static ResultInfo historyDatesInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).dates();
public static ResultInfo historyDatesInfo() {

final ResultType.ListT<Object> type = new ResultType.ListT<>(ResultType.Primitive.DATE_RANGE);

return new FixedLabelResultInfo(label, label, type, Set.of(new SemanticType.EventDateT(), new SemanticType.GroupT()), settings, ResultPrinters.printerFor(type, settings));
return new FixedLabelResultInfo(type, Set.of(new SemanticType.EventDateT(), new SemanticType.GroupT())) {
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).dates();
}
};
}

public static ResultInfo sourceInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).source();

return new FixedLabelResultInfo(label, label, ResultType.Primitive.STRING, Set.of(new SemanticType.SourcesT(), new SemanticType.CategoricalT(), new SemanticType.GroupT()), settings, ResultPrinters.printerFor(ResultType.Primitive.STRING, settings));
public static ResultInfo sourceInfo() {
return new FixedLabelResultInfo(ResultType.Primitive.STRING, Set.of(new SemanticType.SourcesT(), new SemanticType.CategoricalT(), new SemanticType.GroupT())) {
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).source();
}
};
}

public static ResultInfo formContextInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).index();
public static ResultInfo formContextInfo() {

return new FixedLabelResultInfo(label, label, ResultType.Primitive.INTEGER, Set.of(), settings, ResultPrinters.printerFor(ResultType.Primitive.INTEGER, settings));
return new FixedLabelResultInfo(ResultType.Primitive.INTEGER, Set.of()) {
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).index();
}
};
}

public static ResultInfo formDateRangeInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale())
.dateRange();
public static ResultInfo formDateRangeInfo() {

return new FixedLabelResultInfo(label, label, ResultType.Primitive.DATE_RANGE, Set.of(), settings, ResultPrinters.printerFor(ResultType.Primitive.DATE_RANGE, settings));
return new FixedLabelResultInfo(ResultType.Primitive.DATE_RANGE, Set.of()) {
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).dateRange();
}
};
}

public static ResultInfo formResolutionInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).resolution();
public static ResultInfo formResolutionInfo() {

return new FixedLabelResultInfo(ResultType.Primitive.STRING, Set.of()) {
@Override
public Printer createPrinter(PrinterFactory printerFactory, PrintSettings printSettings) {
return new LocalizedEnumPrinter<>(printSettings, Resolution.class);
}

return new FixedLabelResultInfo(label, label, ResultType.Primitive.STRING, Set.of(), settings, new ResultPrinters.LocalizedEnumPrinter<>(settings, Resolution.class));
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).resolution();
}
};
}

public static ResultInfo formEventDateInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale())
.eventDate();
public static ResultInfo formEventDateInfo() {

return new FixedLabelResultInfo(label, label, ResultType.Primitive.DATE, Set.of(), settings, ResultPrinters.printerFor(ResultType.Primitive.DATE, settings));
return new FixedLabelResultInfo(ResultType.Primitive.DATE, Set.of()) {
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).eventDate();
}
};
}

public static ResultInfo formObservationScopeInfo(PrintSettings settings) {
final String label = C10nCache.getLocalized(ResultHeadersC10n.class, settings.getLocale()).observationScope();
public static ResultInfo formObservationScopeInfo() {

return new FixedLabelResultInfo(ResultType.Primitive.STRING, Set.of()) {
@Override
public Printer createPrinter(PrinterFactory printerFactory, PrintSettings printSettings) {
return new LocalizedEnumPrinter<>(printSettings, FeatureGroup.class);
}

return new FixedLabelResultInfo(label, label, ResultType.Primitive.STRING, Set.of(), settings, new ResultPrinters.LocalizedEnumPrinter<>(settings, FeatureGroup.class));
@Override
public String userColumnName(PrintSettings printSettings) {
return C10nCache.getLocalized(ResultHeadersC10n.class, printSettings.getLocale()).observationScope();
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
import com.bakdata.conquery.models.query.queryplan.DateAggregationAction;
import com.bakdata.conquery.models.query.resultinfo.ResultInfo;
import com.bakdata.conquery.models.query.resultinfo.UniqueNamer;
import com.bakdata.conquery.models.query.resultinfo.printers.JavaResultPrinters;
import com.bakdata.conquery.models.query.statistics.ResultStatistics;
import com.bakdata.conquery.models.query.visitor.QueryVisitor;
import com.bakdata.conquery.models.types.SemanticType;
Expand Down Expand Up @@ -585,15 +586,23 @@ public ResultStatistics getResultStatistics(SingleTableResult managedQuery) {
new PrintSettings(true, locale, managedQuery.getNamespace(), config, null, null, decimalFormat, integerFormat);
final UniqueNamer uniqueNamer = new UniqueNamer(printSettings);

final List<ResultInfo> resultInfos = managedQuery.getResultInfos(printSettings);
final List<ResultInfo> resultInfos = managedQuery.getResultInfos();

final Optional<ResultInfo>
dateInfo =
resultInfos.stream().filter(info -> info.getSemantics().contains(new SemanticType.EventDateT())).findFirst();

final Optional<Integer> dateIndex = dateInfo.map(resultInfos::indexOf);

return ResultStatistics.collectResultStatistics(managedQuery, resultInfos, dateInfo, dateIndex, printSettings, uniqueNamer, config);
return ResultStatistics.collectResultStatistics(managedQuery,
resultInfos,
dateInfo,
dateIndex,
printSettings,
uniqueNamer,
config,
new JavaResultPrinters()
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.bakdata.conquery.io.jackson.View;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.DateAggregationMode;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
import com.bakdata.conquery.models.query.Visitable;
Expand Down Expand Up @@ -93,17 +92,17 @@ public void collectRequiredQueries(Set<ManagedExecutionId> requiredQueries) {
}

@Override
public List<ResultInfo> getResultInfos(PrintSettings printSettings) {
public List<ResultInfo> getResultInfos() {
final List<ResultInfo> resultInfos = new ArrayList<>();
ResultInfo dateInfo = ResultHeaders.datesInfo(printSettings);
ResultInfo dateInfo = ResultHeaders.datesInfo();

if(getResolvedDateAggregationMode() != DateAggregationMode.NONE){
// Add one DateInfo for the whole Query
resultInfos.add(0, dateInfo);
}
int lastIndex = resultInfos.size();

childQueries.forEach(q -> resultInfos.addAll(q.getResultInfos(printSettings)));
childQueries.forEach(q -> resultInfos.addAll(q.getResultInfos()));

if(!resultInfos.isEmpty()) {
// Remove DateInfo from each childQuery
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.bakdata.conquery.io.cps.CPSBase;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryExecutionContext;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
Expand Down Expand Up @@ -79,7 +78,7 @@ public final Set<ManagedExecutionId> collectRequiredQueries() {
public abstract void collectRequiredQueries(Set<ManagedExecutionId> requiredQueries) ;

@JsonIgnore
public abstract List<ResultInfo> getResultInfos(PrintSettings settings);
public abstract List<ResultInfo> getResultInfos();

public void visit(Consumer<Visitable> visitor) {
visitor.accept(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
import com.bakdata.conquery.models.query.queryplan.ConceptQueryPlan;
Expand All @@ -33,7 +32,7 @@ public void collectRequiredQueries(Set<ManagedExecutionId> requiredQueries) {
}

@Override
public List<ResultInfo> getResultInfos(PrintSettings settings) {
public List<ResultInfo> getResultInfos() {
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.bakdata.conquery.io.jackson.View;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.DateAggregationMode;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryExecutionContext;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
Expand Down Expand Up @@ -80,16 +79,16 @@ public void resolve(QueryResolveContext context) {
}

@Override
public List<ResultInfo> getResultInfos(PrintSettings printSettings) {
public List<ResultInfo> getResultInfos() {
Preconditions.checkNotNull(resolvedDateAggregationMode);

final List<ResultInfo> resultInfos = new ArrayList<>();

if (resolvedDateAggregationMode != DateAggregationMode.NONE) {
resultInfos.add(ResultHeaders.datesInfo(printSettings));
resultInfos.add(ResultHeaders.datesInfo());
}

resultInfos.addAll(root.getResultInfos(printSettings));
resultInfos.addAll(root.getResultInfos());

return resultInfos;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.bakdata.conquery.models.execution.ManagedExecution;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.ManagedQuery;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
import com.bakdata.conquery.models.query.queryplan.QueryPlan;
Expand All @@ -39,7 +38,7 @@ public Set<ManagedExecutionId> collectRequiredQueries() {
}

@JsonIgnore
public abstract List<ResultInfo> getResultInfos(PrintSettings printSettings);
public abstract List<ResultInfo> getResultInfos();

@Override
public ManagedQuery toManagedExecution(User user, Dataset submittedDataset, MetaStorage storage, DatasetRegistry<?> datasetRegistry) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import com.bakdata.conquery.models.error.ConqueryError;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.DateAggregationMode;
import com.bakdata.conquery.models.query.PrintSettings;
import com.bakdata.conquery.models.query.QueryExecutionContext;
import com.bakdata.conquery.models.query.QueryPlanContext;
import com.bakdata.conquery.models.query.QueryResolveContext;
Expand All @@ -27,7 +26,7 @@
import com.bakdata.conquery.models.query.queryplan.ConceptQueryPlan;
import com.bakdata.conquery.models.query.queryplan.SecondaryIdQueryPlan;
import com.bakdata.conquery.models.query.resultinfo.ResultInfo;
import com.bakdata.conquery.models.query.resultinfo.printers.SecondaryIdResultInfo;
import com.bakdata.conquery.models.query.resultinfo.SecondaryIdResultInfo;
import com.fasterxml.jackson.annotation.JsonView;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
Expand Down Expand Up @@ -125,12 +124,12 @@ public void resolve(final QueryResolveContext context) {
}

@Override
public List<ResultInfo> getResultInfos(PrintSettings printSettings) {
public List<ResultInfo> getResultInfos() {
final List<ResultInfo> resultInfos = new ArrayList<>();

resultInfos.add(new SecondaryIdResultInfo(secondaryId, printSettings));
resultInfos.add(new SecondaryIdResultInfo(secondaryId));

resultInfos.addAll(query.getResultInfos(printSettings));
resultInfos.addAll(query.getResultInfos());

return resultInfos;
}
Expand Down
Loading

0 comments on commit 23b76fd

Please sign in to comment.