Skip to content

Commit 45d6858

Browse files
authored
Merge pull request #3807 from ingef/fix/excel-result-init
fix: excel result init
2 parents f501a41 + d2e6426 commit 45d6858

21 files changed

Lines changed: 85 additions & 45 deletions

backend/src/main/java/com/bakdata/conquery/apiv1/QueryProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ public <E extends ManagedExecution & SingleTableResult> ResultStatistics getResu
622622

623623
managedQuery.initExecutable();
624624

625-
final List<ResultInfo> resultInfos = managedQuery.getResultInfos();
625+
final List<ResultInfo> resultInfos = managedQuery.collectResultInfos();
626626

627627
final Optional<ResultInfo>
628628
dateInfo =

backend/src/main/java/com/bakdata/conquery/io/result/arrow/ResultArrowProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public static <E extends ManagedExecution & SingleTableResult> Response getArrow
103103

104104
// Collect ResultInfos for id columns and result columns
105105
final List<ResultInfo> resultInfosId = config.getIdColumns().getIdResultInfos();
106-
final List<ResultInfo> resultInfosExec = exec.getResultInfos();
106+
final List<ResultInfo> resultInfosExec = exec.collectResultInfos();
107107

108108
StreamingOutput out = output -> {
109109
CountingOutputStream countingOutputStream = new CountingOutputStream(output);

backend/src/main/java/com/bakdata/conquery/io/result/csv/ResultCsvProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public <E extends ManagedExecution & SingleTableResult> Response createResult(E
6363
final StreamingOutput out = os -> {
6464
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, charset))) {
6565
final CsvRenderer renderer = new CsvRenderer(config.getCsv().createWriter(writer), settings);
66-
renderer.toCSV(config.getIdColumns().getIdResultInfos(), exec.getResultInfos(), exec.streamResults(limit), settings, charset);
66+
renderer.toCSV(config.getIdColumns().getIdResultInfos(), exec.collectResultInfos(), exec.streamResults(limit), settings, charset);
6767
}
6868
catch (EofException e) {
6969
log.trace("User canceled download");

backend/src/main/java/com/bakdata/conquery/io/result/parquet/ResultParquetProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public Response createResultFile(Subject subject, ManagedExecutionId execId, boo
6060
ParquetRenderer.writeToStream(
6161
output,
6262
config.getIdColumns().getIdResultInfos(),
63-
singleTableResult.getResultInfos(),
63+
singleTableResult.collectResultInfos(),
6464
settings,
6565
singleTableResult.streamResults(limit)
6666
);

backend/src/main/java/com/bakdata/conquery/models/forms/managed/ManagedInternalForm.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.bakdata.conquery.models.identifiable.ids.specific.UserId;
2222
import com.bakdata.conquery.models.messages.namespaces.specific.ExecuteForm;
2323
import com.bakdata.conquery.models.query.ColumnDescriptor;
24+
import com.bakdata.conquery.models.query.ExecutionManager;
2425
import com.bakdata.conquery.models.query.ManagedQuery;
2526
import com.bakdata.conquery.models.query.QueryResolveContext;
2627
import com.bakdata.conquery.models.query.SingleTableResult;
@@ -142,11 +143,18 @@ public List<ColumnDescriptor> generateColumnDescriptions(boolean isInitialized,
142143

143144
@Override
144145
@JsonIgnore
145-
public List<ResultInfo> getResultInfos() {
146+
public List<ResultInfo> collectResultInfos() {
146147
if (subQueries.size() != 1) {
147148
throw new UnsupportedOperationException("Cannot gather result info when multiple tables are generated");
148149
}
149-
return ((ManagedQuery) subQueries.values().iterator().next().resolve()).getResultInfos();
150+
return ((ManagedQuery) subQueries.values().iterator().next().resolve()).collectResultInfos();
151+
}
152+
153+
@Override
154+
@JsonIgnore
155+
public List<ResultInfo> getResultInfos() {
156+
ExecutionManager.InternalExecutionInfo executionInfo = getNamespace().getExecutionManager().getExecutionInfo(getId());
157+
return executionInfo.getResultInfos();
150158
}
151159

152160
@Override

backend/src/main/java/com/bakdata/conquery/models/query/DistributedExecutionManager.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.bakdata.conquery.models.query;
22

33
import java.util.Collection;
4+
import java.util.Collections;
45
import java.util.List;
56
import java.util.Map;
67
import java.util.Optional;
@@ -23,6 +24,7 @@
2324
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
2425
import com.bakdata.conquery.models.identifiable.ids.specific.WorkerId;
2526
import com.bakdata.conquery.models.messages.namespaces.specific.CancelQuery;
27+
import com.bakdata.conquery.models.query.resultinfo.ResultInfo;
2628
import com.bakdata.conquery.models.query.results.EntityResult;
2729
import com.bakdata.conquery.models.query.results.ShardResult;
2830
import com.bakdata.conquery.models.worker.DatasetRegistry;
@@ -51,10 +53,12 @@ protected <E extends ManagedExecution & InternalExecution> void doExecute(E exec
5153

5254
log.info("Executing Query[{}] in Dataset[{}]", execution.getQueryId(), execution.getDataset());
5355

54-
addState(execution.getId(), new DistributedExecutionInfo());
56+
List<ResultInfo> resultInfo = execution instanceof SingleTableResult singleTableResult ? singleTableResult.collectResultInfos() : Collections.emptyList();
57+
58+
addState(execution.getId(), new DistributedExecutionInfo(resultInfo));
5559

5660
if (execution instanceof ManagedInternalForm<?> form) {
57-
form.getSubQueries().values().forEach((query) -> addState(query, new DistributedExecutionInfo()));
61+
form.getSubQueries().values().forEach((query) -> addState(query, new DistributedExecutionInfo(form.collectResultInfos())));
5862
}
5963

6064
final WorkerHandler workerHandler = getWorkerHandler(execution.getDataset());
@@ -146,10 +150,11 @@ public static class DistributedExecutionInfo implements InternalExecutionInfo {
146150
@NonNull
147151
private ExecutionState executionState;
148152
private Map<WorkerId, List<EntityResult>> results;
153+
private List<ResultInfo> resultInfos;
149154
private CountDownLatch executingLock;
150155

151-
public DistributedExecutionInfo() {
152-
this(ExecutionState.RUNNING, new ConcurrentHashMap<>(), new CountDownLatch(1));
156+
public DistributedExecutionInfo(List<ResultInfo> resultInfos) {
157+
this(ExecutionState.RUNNING, new ConcurrentHashMap<>(), resultInfos, new CountDownLatch(1));
153158
}
154159

155160
@NotNull

backend/src/main/java/com/bakdata/conquery/models/query/ExecutionManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static com.bakdata.conquery.models.execution.ExecutionState.RUNNING;
44

5+
import java.util.List;
56
import java.util.NoSuchElementException;
67
import java.util.Optional;
78
import java.util.UUID;
@@ -22,6 +23,7 @@
2223
import com.bakdata.conquery.models.forms.managed.ExternalExecution;
2324
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
2425
import com.bakdata.conquery.models.identifiable.ids.specific.UserId;
26+
import com.bakdata.conquery.models.query.resultinfo.ResultInfo;
2527
import com.bakdata.conquery.models.query.results.EntityResult;
2628
import com.bakdata.conquery.models.worker.DatasetRegistry;
2729
import com.bakdata.conquery.models.worker.Namespace;
@@ -299,6 +301,7 @@ public interface ExecutionInfo {
299301

300302
public interface InternalExecutionInfo extends ExecutionInfo {
301303
Stream<EntityResult> streamQueryResults();
304+
List<ResultInfo> getResultInfos();
302305
}
303306

304307

backend/src/main/java/com/bakdata/conquery/models/query/ManagedQuery.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,18 @@ protected void setAdditionalFieldsForStatusWithColumnDescription(Subject subject
117117
}
118118

119119
@JsonIgnore
120-
public List<ResultInfo> getResultInfos() {
120+
public List<ResultInfo> collectResultInfos() {
121121
Preconditions.checkState(isInitialized());
122122
return query.getResultInfos();
123123
}
124124

125+
@Override
126+
@JsonIgnore
127+
public List<ResultInfo> getResultInfos() {
128+
ExecutionManager.InternalExecutionInfo executionInfo = getNamespace().getExecutionManager().getExecutionInfo(getId());
129+
return executionInfo.getResultInfos();
130+
}
131+
125132
@Override
126133
@JsonIgnore
127134
public QueryDescription getSubmitted() {
@@ -132,8 +139,8 @@ public QueryDescription getSubmitted() {
132139
* Creates a default label based on the submitted {@link QueryDescription}.
133140
* The Label is customized by mentioning that a description contained a
134141
* {@link CQExternal}, {@link CQReusedQuery} or {@link CQConcept}, in this order.
135-
* In case of one ore more {@link CQConcept} the distinct labels of the concepts are chosen
136-
* and concatinated until a length of MAX_CONCEPT_LABEL_CONCAT_LENGTH is reached.
142+
* In case of one or more {@link CQConcept} the distinct labels of the concepts are chosen
143+
* and concatenated until a length of MAX_CONCEPT_LABEL_CONCAT_LENGTH is reached.
137144
* All further labels are dropped.
138145
*/
139146
@Override

backend/src/main/java/com/bakdata/conquery/models/query/SingleTableResult.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,25 @@ default List<ColumnDescriptor> generateColumnDescriptions(boolean isInitialized,
3636
}
3737

3838
final UniqueNamer collector = new UniqueNamer(settings);
39-
getResultInfos().forEach(info -> columnDescriptions.add(info.asColumnDescriptor(collector, settings)));
39+
collectResultInfos().forEach(info -> columnDescriptions.add(info.asColumnDescriptor(collector, settings)));
4040
return columnDescriptions;
4141
}
4242

4343
@JsonIgnore
4444
Namespace getNamespace();
4545

46+
/**
47+
* Collect result infos from the submitted query that this execution wraps
48+
* @return The result infos for this execution
49+
* @implNote The execution may need to be initialised beforehand
50+
*/
51+
@JsonIgnore
52+
List<ResultInfo> collectResultInfos();
53+
54+
/**
55+
* Collect result infos from the submitted query that this execution wraps
56+
* @return The result infos for this execution
57+
*/
4658
@JsonIgnore
4759
List<ResultInfo> getResultInfos();
4860

backend/src/main/java/com/bakdata/conquery/models/query/preview/EntityPreviewExecution.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,13 +155,14 @@ private List<EntityPreviewStatus.Info> transformQueryResultToInfos(
155155

156156
// Submitted Query is a single line of an AbsoluteFormQuery => MultilineEntityResult with a single line.
157157
final MultilineEntityResult result = (MultilineEntityResult) infoCardExecution.streamResults(OptionalLong.empty()).collect(MoreCollectors.onlyElement());
158-
final Object[] values = result.getValues().get(0);
158+
final Object[] values = result.getValues().getFirst();
159159

160160
final List<EntityPreviewStatus.Info> extraInfos = new ArrayList<>(values.length);
161161

162162
// We are only interested in the Select results.
163-
for (int index = AbsoluteFormQuery.FEATURES_OFFSET; index < infoCardExecution.getResultInfos().size(); index++) {
164-
final ResultInfo resultInfo = infoCardExecution.getResultInfos().get(index);
163+
List<ResultInfo> resultInfos = infoCardExecution.collectResultInfos();
164+
for (int index = AbsoluteFormQuery.FEATURES_OFFSET; index < resultInfos.size(); index++) {
165+
final ResultInfo resultInfo = resultInfos.get(index);
165166

166167
final Object value = values[index];
167168
final Object printed;
@@ -206,7 +207,7 @@ private List<EntityPreviewStatus.TimeStratifiedInfos> toChronoInfos(
206207
description.selects().stream().collect(Collectors.toMap(PreviewConfig.InfoCardSelect::select, Function.identity()));
207208

208209
// Group lines by year and quarter.
209-
final Function<Object[], Map<String, Object>> lineTransformer = createLineToMapTransformer(query.getResultInfos(), select2desc, printSettings, printers);
210+
final Function<Object[], Map<String, Object>> lineTransformer = createLineToMapTransformer(query.collectResultInfos(), select2desc, printSettings, printers);
210211
final List<EntityPreviewStatus.YearEntry> yearEntries = createYearEntries(entityResult, lineTransformer);
211212

212213
final Object[] completeResult = getCompleteLine(entityResult);
@@ -315,7 +316,7 @@ private static List<ColumnDescriptor> createChronoColumnDescriptors(SingleTableR
315316

316317
final List<ColumnDescriptor> columnDescriptions = new ArrayList<>();
317318

318-
for (ResultInfo info : query.getResultInfos()) {
319+
for (ResultInfo info : query.collectResultInfos()) {
319320
if (info instanceof SelectResultInfo selectResultInfo) {
320321
final PreviewConfig.InfoCardSelect desc = select2desc.get(selectResultInfo.getSelect().getId());
321322

@@ -347,7 +348,7 @@ private static Map<Integer, Object[]> getYearLines(EntityResult entityResult) {
347348
}
348349

349350
// Since we know the dates are always aligned we need to only respect their starts.
350-
final LocalDate date = CDate.toLocalDate(((List<Integer>) line[AbsoluteFormQuery.TIME_INDEX]).get(0));
351+
final LocalDate date = CDate.toLocalDate(((List<Integer>) line[AbsoluteFormQuery.TIME_INDEX]).getFirst());
351352

352353
final int year = date.getYear();
353354

@@ -369,7 +370,7 @@ private static Map<Integer, Map<Integer, Object[]>> getQuarterLines(EntityResult
369370
}
370371

371372
// Since we know the dates are always aligned we need to only respect their starts.
372-
final LocalDate date = CDate.toLocalDate(((List<Integer>) line[AbsoluteFormQuery.TIME_INDEX]).get(0));
373+
final LocalDate date = CDate.toLocalDate(((List<Integer>) line[AbsoluteFormQuery.TIME_INDEX]).getFirst());
373374

374375
final int year = date.getYear();
375376
final int quarter = QuarterUtils.getQuarter(date);
@@ -386,8 +387,8 @@ protected void setAdditionalFieldsForStatusWithSource(Subject subject, FullExecu
386387
}
387388

388389
@Override
389-
public List<ResultInfo> getResultInfos() {
390-
return getValuesQuery().getResultInfos();
390+
public List<ResultInfo> collectResultInfos() {
391+
return getValuesQuery().collectResultInfos();
391392
}
392393

393394
@Override

0 commit comments

Comments
 (0)