You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2023/04/05 20:18:35 UTC
[streampipes] 01/01: [hotfix] Improve handling of count queries, improve table widget
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 <do...@gmail.com>
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]"