This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch fix-bugs-in-data-explorer in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit d0fc6ae63ea3a73cd949323c74af6ccffe787803 Author: Dominik Riemer <[email protected]> AuthorDate: Wed Apr 5 22:18:10 2023 +0200 [hotfix] Improve handling of count queries, improve table widget --- .../influx/DataExplorerInfluxQueryExecutor.java | 13 ++++++++++++- .../param/ProvidedRestQueryParamConverter.java | 4 ++-- .../streampipes/dataexplorer/param/SelectQueryParams.java | 14 +++++++++++--- .../{ItemClauseParams.java => LimitClauseParams.java} | 8 ++++---- .../dataexplorer/query/DataExplorerQueryExecutor.java | 3 ++- .../components/widgets/table/table-widget.component.html | 1 + 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java index d0bbdc09f..f6531b08f 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/influx/DataExplorerInfluxQueryExecutor.java @@ -32,6 +32,7 @@ import org.influxdb.dto.QueryResult; import java.util.ArrayList; import java.util.List; +import java.util.Objects; public class DataExplorerInfluxQueryExecutor extends DataExplorerQueryExecutor<Query, QueryResult> { @@ -52,12 +53,22 @@ public class DataExplorerInfluxQueryExecutor extends DataExplorerQueryExecutor<Q protected double getAmountOfResults(QueryResult countQueryResult) { if (countQueryResult.getResults().get(0).getSeries() != null && countQueryResult.getResults().get(0).getSeries().get(0).getValues() != null) { - return (double) countQueryResult.getResults().get(0).getSeries().get(0).getValues().get(0).get(1); + return getMaxCount(countQueryResult.getResults().get(0).getSeries().get(0).getValues().get(0)); } else { return 0.0; } } + private double getMaxCount(List<Object> rows) { + return rows.stream() + .skip(1) + .filter(Objects::nonNull) + .filter(Number.class::isInstance) + .mapToDouble(r -> ((Number) r).doubleValue()) + .max() + .orElse(Double.NEGATIVE_INFINITY); + } + protected DataSeries convertResult(QueryResult.Series series, boolean ignoreMissingValues) { diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/ProvidedRestQueryParamConverter.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/ProvidedRestQueryParamConverter.java index 963ec9d32..b95c2e8fb 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/ProvidedRestQueryParamConverter.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/ProvidedRestQueryParamConverter.java @@ -21,7 +21,7 @@ package org.apache.streampipes.dataexplorer.param; import org.apache.streampipes.dataexplorer.param.model.FillClauseParams; import org.apache.streampipes.dataexplorer.param.model.GroupByTagsClauseParams; import org.apache.streampipes.dataexplorer.param.model.GroupByTimeClauseParams; -import org.apache.streampipes.dataexplorer.param.model.ItemClauseParams; +import org.apache.streampipes.dataexplorer.param.model.LimitClauseParams; import org.apache.streampipes.dataexplorer.param.model.OffsetClauseParams; import org.apache.streampipes.dataexplorer.param.model.OrderByClauseParams; import org.apache.streampipes.dataexplorer.param.model.SelectClauseParams; @@ -99,7 +99,7 @@ public class ProvidedRestQueryParamConverter { } if (params.has(QP_LIMIT)) { - queryParameters.withLimitParams(ItemClauseParams.from(params.getAsInt(QP_LIMIT))); + queryParameters.withLimitParams(LimitClauseParams.from(params.getAsInt(QP_LIMIT))); } if (params.has(QP_OFFSET)) { diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/SelectQueryParams.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/SelectQueryParams.java index 741365060..558a56e4e 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/SelectQueryParams.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/SelectQueryParams.java @@ -20,7 +20,7 @@ package org.apache.streampipes.dataexplorer.param; import org.apache.streampipes.dataexplorer.param.model.FillClauseParams; import org.apache.streampipes.dataexplorer.param.model.GroupByTagsClauseParams; import org.apache.streampipes.dataexplorer.param.model.GroupByTimeClauseParams; -import org.apache.streampipes.dataexplorer.param.model.ItemClauseParams; +import org.apache.streampipes.dataexplorer.param.model.LimitClauseParams; import org.apache.streampipes.dataexplorer.param.model.OffsetClauseParams; import org.apache.streampipes.dataexplorer.param.model.OrderByClauseParams; import org.apache.streampipes.dataexplorer.param.model.SelectClauseParams; @@ -39,7 +39,7 @@ public class SelectQueryParams { private GroupByTimeClauseParams groupByTimeClauseParams; private OrderByClauseParams orderByClauseParams; - private ItemClauseParams limitParams; + private LimitClauseParams limitParams; private OffsetClauseParams offsetClauseParams; @@ -59,7 +59,7 @@ public class SelectQueryParams { this.selectParams = params; } - public void withLimitParams(ItemClauseParams params) { + public void withLimitParams(LimitClauseParams params) { this.limitParams = params; } @@ -99,6 +99,14 @@ public class SelectQueryParams { return builder.build(); } + public int getLimit() { + if (Objects.nonNull(limitParams)) { + return limitParams.getLimit(); + } else { + return Integer.MIN_VALUE; + } + } + private <T> void prepareBuilder(IDataLakeQueryBuilder<T> builder) { if (Objects.nonNull(this.whereParams)) { this.whereParams.buildStatement(builder); diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/ItemClauseParams.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/LimitClauseParams.java similarity index 86% rename from streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/ItemClauseParams.java rename to streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/LimitClauseParams.java index ea447176c..bdff3d070 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/ItemClauseParams.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/LimitClauseParams.java @@ -21,16 +21,16 @@ package org.apache.streampipes.dataexplorer.param.model; import org.apache.streampipes.dataexplorer.api.IQueryStatement; import org.apache.streampipes.dataexplorer.querybuilder.IDataLakeQueryBuilder; -public class ItemClauseParams implements IQueryStatement { +public class LimitClauseParams implements IQueryStatement { private final Integer limit; - public ItemClauseParams(Integer limit) { + public LimitClauseParams(Integer limit) { this.limit = limit; } - public static ItemClauseParams from(Integer limit) { - return new ItemClauseParams(limit); + public static LimitClauseParams from(Integer limit) { + return new LimitClauseParams(limit); } public Integer getLimit() { diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQueryExecutor.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQueryExecutor.java index 769fc042a..29d7de50f 100644 --- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQueryExecutor.java +++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/query/DataExplorerQueryExecutor.java @@ -56,7 +56,8 @@ public abstract class DataExplorerQueryExecutor<X, W> { if (this.maximumAmountOfEvents != -1) { X countQuery = makeCountQuery(params); W countQueryResult = executeQuery(countQuery); - Double amountOfQueryResults = getAmountOfResults(countQueryResult); + var limit = params.getLimit(); + Double amountOfQueryResults = limit == Integer.MIN_VALUE ? getAmountOfResults(countQueryResult) : limit; if (amountOfQueryResults > this.maximumAmountOfEvents) { SpQueryResult tooMuchData = new SpQueryResult(); diff --git a/ui/src/app/data-explorer/components/widgets/table/table-widget.component.html b/ui/src/app/data-explorer/components/widgets/table/table-widget.component.html index b1cedb470..1b44a9132 100644 --- a/ui/src/app/data-explorer/components/widgets/table/table-widget.component.html +++ b/ui/src/app/data-explorer/components/widgets/table/table-widget.component.html @@ -120,6 +120,7 @@ <tr mat-row *matRowDef="let row; columns: columnNames"></tr> </table> <mat-paginator + *ngIf="showData" [length]="100" [pageSize]="500" [pageSizeOptions]="[10, 20, 50, 100, 500, 1000]"
