Skip to content

Commit e9b1b36

Browse files
committed
set result count only for finished executions in execution info
1 parent 7f468b8 commit e9b1b36

8 files changed

Lines changed: 33 additions & 17 deletions

File tree

backend/src/main/java/com/bakdata/conquery/models/config/ExcelResultProvider.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Collection;
77
import java.util.Collections;
88
import java.util.List;
9+
import java.util.OptionalLong;
910
import jakarta.validation.Valid;
1011
import jakarta.validation.constraints.NotNull;
1112
import jakarta.ws.rs.core.MediaType;
@@ -62,9 +63,15 @@ public Collection<ResultAsset> generateResultURLs(ManagedExecution exec, UriBuil
6263
}
6364

6465
// Check if resulting dimensions are possible for the xlsx format
65-
final long rowCount = singleExecution.resultRowCount();
66+
final OptionalLong rowCount = singleExecution.resultRowCount();
67+
68+
if (rowCount.isEmpty()) {
69+
log.warn("Cannot check maximum row requirement, because the result has no rows");
70+
return Collections.emptyList();
71+
}
72+
6673
final int maxRowCount = SpreadsheetVersion.EXCEL2007.getMaxRows();
67-
if (rowCount + 1 /* header row*/ > maxRowCount) {
74+
if (rowCount.getAsLong() + 1 /* header row*/ > maxRowCount) {
6875

6976
log.trace("Row count is too high for XLSX format (is: {}, max: {}). Not producing a result URL", rowCount, maxRowCount);
7077

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public Stream<EntityResult> streamResults(OptionalLong limit) {
167167
}
168168

169169
@Override
170-
public long resultRowCount() {
170+
public OptionalLong resultRowCount() {
171171
if (subQueries.size() != 1) {
172172
// Get the query, only if there is only one query set in the whole execution
173173
throw new UnsupportedOperationException("Cannot return the result query of a multi query form");

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

Lines changed: 13 additions & 5 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.List;
4+
import java.util.Optional;
45
import java.util.OptionalLong;
56
import java.util.concurrent.atomic.AtomicLong;
67
import java.util.function.Consumer;
@@ -82,18 +83,25 @@ public Stream<EntityResult> streamResults(OptionalLong maybeLimit) {
8283
}
8384

8485
@Override
85-
public synchronized long resultRowCount() {
86+
public synchronized OptionalLong resultRowCount() {
8687
ExecutionManager executionManager = getExecutionManager();
87-
return executionManager.tryGetExecutionInfo(getId())
88-
.map(info -> ((ExecutionManager.InternalExecutionInfo) info).getResultCount())
89-
.orElse(0L);
88+
Optional<ExecutionManager.ExecutionInfo> executionInfo = executionManager.tryGetExecutionInfo(getId());
89+
90+
return executionInfo.map(ExecutionManager.InternalExecutionInfo.class::cast)
91+
.map(ExecutionManager.InternalExecutionInfo::getResultCount)
92+
.map(OptionalLong::of)
93+
.orElse(OptionalLong.empty());
9094
}
9195

9296
@Override
9397
public void setStatusBase(@NonNull Subject subject, @NonNull ExecutionStatus status) {
9498

9599
super.setStatusBase(subject, status);
96-
status.setNumberOfResults(resultRowCount());
100+
OptionalLong resultRowCount = resultRowCount();
101+
if (status.getStatus().equals(ExecutionState.DONE) && resultRowCount.isPresent()) {
102+
// We only want to present the result number if the execution finished
103+
status.setNumberOfResults(resultRowCount.getAsLong());
104+
}
97105

98106
Query query = getQuery();
99107
status.setQueryType(query.getClass().getAnnotation(CPSType.class).id());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ default List<ColumnDescriptor> generateColumnDescriptions(boolean isInitialized,
6464
Stream<EntityResult> streamResults(OptionalLong limit);
6565

6666
@JsonIgnore
67-
long resultRowCount();
67+
OptionalLong resultRowCount();
6868

6969

7070
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public Stream<EntityResult> streamResults(OptionalLong limit) {
397397
}
398398

399399
@Override
400-
public long resultRowCount() {
400+
public OptionalLong resultRowCount() {
401401
return getValuesQuery().resultRowCount();
402402
}
403403
}

backend/src/main/java/com/bakdata/conquery/models/query/statistics/ResultStatistics.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static ResultStatistics collectResultStatistics(
6666
}
6767

6868
// Count result lines and entities (may differ in case of form or SecondaryIdQuery)
69-
final ListenableFuture<Integer> futureLines = executorService.submit(() -> (int) managedQuery.resultRowCount());
69+
final ListenableFuture<Integer> futureLines = executorService.submit(() -> (int) managedQuery.resultRowCount().orElse(0));
7070

7171
final ListenableFuture<Integer> futureEntities = executorService.submit(() -> (int) managedQuery.streamResults(OptionalLong.empty()).count());
7272

backend/src/test/java/com/bakdata/conquery/api/StoredQueriesProcessorTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.ArrayList;
1010
import java.util.Collections;
1111
import java.util.List;
12+
import java.util.OptionalLong;
1213
import java.util.UUID;
1314
import java.util.stream.Collectors;
1415
import jakarta.validation.Validator;
@@ -249,8 +250,8 @@ public List<ResultInfo> collectResultInfos() {
249250
}
250251

251252
@Override
252-
public synchronized long resultRowCount() {
253-
return resultCount;
253+
public synchronized OptionalLong resultRowCount() {
254+
return OptionalLong.of(resultCount);
254255
}
255256
};
256257
setState(execState, managedQuery.getId());
@@ -277,7 +278,7 @@ public void getQueriesFiltered() {
277278

278279
assertThat(infos)
279280
.containsExactly(
280-
makeState(QUERY_ID_0, USERS[0], USERS[0], NEW, "CONCEPT_QUERY", null, 100L),
281+
makeState(QUERY_ID_0, USERS[0], USERS[0], NEW, "CONCEPT_QUERY", null, null),
281282
makeState(QUERY_ID_4, USERS[1], USERS[0], DONE, "CONCEPT_QUERY", null, 100L),
282283
makeState(QUERY_ID_7, USERS[1], USERS[0], DONE, "SECONDARY_ID_QUERY", new SecondaryIdDescriptionId(DATASET_0.getId(), "sid"), 100L),
283284
makeState(QUERY_ID_9, USERS[1], USERS[0], DONE, "CONCEPT_QUERY", null, 100L),
@@ -309,8 +310,8 @@ public List<ResultInfo> collectResultInfos() {
309310
}
310311

311312
@Override
312-
public synchronized long resultRowCount() {
313-
return resultCount;
313+
public synchronized OptionalLong resultRowCount() {
314+
return resultCount == null ? OptionalLong.empty(): OptionalLong.of(resultCount);
314315
}
315316
};
316317

backend/src/test/java/com/bakdata/conquery/integration/json/AbstractQueryEngineTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void executeTest(StandaloneSupport standaloneSupport) throws IOException
8484
if (executionResult.streamResults(OptionalLong.empty()).noneMatch(MultilineEntityResult.class::isInstance)) {
8585
long lastResultCount;
8686
if (executionResult instanceof ManagedQuery editorQuery) {
87-
lastResultCount = editorQuery.resultRowCount();
87+
lastResultCount = editorQuery.resultRowCount().orElseThrow();
8888
}
8989
else {
9090
throw new UnexpectedTypeException("Did expect an EditorQuery, but got element of type %s.".formatted(execution.getClass()));

0 commit comments

Comments
 (0)