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/06 05:17:50 UTC

[streampipes] branch dev updated: [hotfix] Improve handling of count queries, improve table widget (#1484)

This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 1dcc11b5b [hotfix] Improve handling of count queries, improve table widget (#1484)
1dcc11b5b is described below

commit 1dcc11b5bd4f77802715bd68de35ea9a96a0e099
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Thu Apr 6 07:17:44 2023 +0200

    [hotfix] Improve handling of count queries, improve table widget (#1484)
---
 .../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 54cd01b8e..c116b15eb 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
@@ -33,6 +33,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> {
 
@@ -53,12 +54,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]"