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 f06b3e422 [hotfix] Extract interface from data explorer query builder
f06b3e422 is described below

commit f06b3e422ba07c142699feaaf2a53f4b7a99e6e2
Author: Dominik Riemer <[email protected]>
AuthorDate: Sat Feb 25 14:55:58 2023 +0100

    [hotfix] Extract interface from data explorer query builder
---
 .../dataexplorer/sdk/DataLakeQueryBuilder.java     | 42 ++++++++++--
 .../dataexplorer/sdk/IDataLakeQueryBuilder.java    | 74 ++++++++++++++++++++++
 2 files changed, 110 insertions(+), 6 deletions(-)

diff --git 
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
 
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
index 71c091348..42f5126e7 100644
--- 
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
+++ 
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/DataLakeQueryBuilder.java
@@ -25,6 +25,7 @@ import 
org.apache.streampipes.dataexplorer.v4.params.ColumnFunction;
 import org.influxdb.dto.Query;
 import org.influxdb.querybuilder.Ordering;
 import org.influxdb.querybuilder.SelectionQueryImpl;
+import org.influxdb.querybuilder.clauses.AndConjunction;
 import org.influxdb.querybuilder.clauses.Clause;
 import org.influxdb.querybuilder.clauses.ConjunctionClause;
 import org.influxdb.querybuilder.clauses.NestedClause;
@@ -39,7 +40,7 @@ import static 
org.influxdb.querybuilder.BuiltQuery.QueryBuilder.asc;
 import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.desc;
 import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.select;
 
-public class DataLakeQueryBuilder {
+public class DataLakeQueryBuilder implements IDataLakeQueryBuilder<Query> {
 
   private final String measurementId;
   private final SelectionQueryImpl selectionQuery;
@@ -63,18 +64,21 @@ public class DataLakeQueryBuilder {
     return new DataLakeQueryBuilder(measurementId);
   }
 
+  @Override
   public DataLakeQueryBuilder withSimpleColumn(String columnName) {
     this.selectionQuery.column(columnName);
 
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withSimpleColumns(List<String> columnNames) {
     columnNames.forEach(this.selectionQuery::column);
 
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withAggregatedColumn(String columnName,
                                                    ColumnFunction 
columnFunction,
                                                    String targetName) {
@@ -97,16 +101,19 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withStartTime(long startTime) {
     this.whereClauses.add(new SimpleClause("time", ">=", startTime * 1000000));
     return this;
   }
 
 
+  @Override
   public DataLakeQueryBuilder withEndTime(long endTime) {
     return withEndTime(endTime, true);
   }
 
+  @Override
   public DataLakeQueryBuilder withEndTime(long endTime,
                                           boolean includeEndTime) {
     String operator = includeEndTime ? "<=" : "<";
@@ -114,6 +121,7 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withTimeBoundary(long startTime,
                                                long endTime) {
     this.withStartTime(startTime);
@@ -122,6 +130,7 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withFilter(String field,
                                          String operator,
                                          Object value) {
@@ -129,26 +138,36 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withExclusiveFilter(String field,
                                                   String operator,
                                                   List<?> values) {
     List<ConjunctionClause> or = new ArrayList<>();
-    values.forEach(value -> {
-      or.add(new OrConjunction(new SimpleClause(field, operator, value)));
-    });
+    values.forEach(value -> or.add(new OrConjunction(new SimpleClause(field, 
operator, value))));
 
-    NestedClause nestedClause = new NestedClause(or);
-    this.whereClauses.add(nestedClause);
+    addNestedWhereClause(or);
+    return this;
+  }
 
+  @Override
+  public DataLakeQueryBuilder withInclusiveFilter(String field,
+                                                  String operator,
+                                                  List<?> values) {
+    List<ConjunctionClause> and = new ArrayList<>();
+    values.forEach(value -> and.add(new AndConjunction(new SimpleClause(field, 
operator, value))));
+
+    addNestedWhereClause(and);
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withFilter(NestedClause clause) {
     this.whereClauses.add(clause);
 
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withGroupByTime(String timeInterval) {
 
     this.groupByClauses.add(new RawTextClause("time(" + timeInterval + ")"));
@@ -156,6 +175,7 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withGroupByTime(String timeInterval,
                                               String offsetInterval) {
 
@@ -168,6 +188,7 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withGroupBy(String column) {
 
     this.groupByClauses.add(new RawTextClause(column));
@@ -175,6 +196,7 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withOrderBy(DataLakeQueryOrdering ordering) {
     if (DataLakeQueryOrdering.ASC.equals(ordering)) {
       this.ordering = asc();
@@ -185,18 +207,21 @@ public class DataLakeQueryBuilder {
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withLimit(int limit) {
     this.limit = limit;
 
     return this;
   }
 
+  @Override
   public DataLakeQueryBuilder withOffset(int offset) {
     this.offset = offset;
 
     return this;
   }
 
+  @Override
   public Query build() {
     var selectQuery =
         this.selectionQuery.from(env.getTsStorageBucket().getValueOrDefault(), 
"\"" + measurementId + "\"");
@@ -220,4 +245,9 @@ public class DataLakeQueryBuilder {
 
     return selectQuery;
   }
+
+  private void addNestedWhereClause(List<ConjunctionClause> clauses) {
+    NestedClause nestedClause = new NestedClause(clauses);
+    this.whereClauses.add(nestedClause);
+  }
 }
diff --git 
a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
 
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
new file mode 100644
index 000000000..2bc70df16
--- /dev/null
+++ 
b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/sdk/IDataLakeQueryBuilder.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.dataexplorer.sdk;
+
+import org.apache.streampipes.dataexplorer.v4.params.ColumnFunction;
+
+import org.influxdb.querybuilder.clauses.NestedClause;
+
+import java.util.List;
+
+public interface IDataLakeQueryBuilder<T> {
+  IDataLakeQueryBuilder withSimpleColumn(String columnName);
+
+  IDataLakeQueryBuilder withSimpleColumns(List<String> columnNames);
+
+  IDataLakeQueryBuilder withAggregatedColumn(String columnName,
+                                            ColumnFunction columnFunction,
+                                            String targetName);
+
+  IDataLakeQueryBuilder withStartTime(long startTime);
+
+  IDataLakeQueryBuilder withEndTime(long endTime);
+
+  IDataLakeQueryBuilder withEndTime(long endTime,
+                                   boolean includeEndTime);
+
+  IDataLakeQueryBuilder withTimeBoundary(long startTime,
+                                        long endTime);
+
+  IDataLakeQueryBuilder withFilter(String field,
+                                  String operator,
+                                  Object value);
+
+  IDataLakeQueryBuilder withExclusiveFilter(String field,
+                                           String operator,
+                                           List<?> values);
+
+  IDataLakeQueryBuilder withInclusiveFilter(String field,
+                                            String operator,
+                                            List<?> values);
+
+  IDataLakeQueryBuilder withFilter(NestedClause clause);
+
+  IDataLakeQueryBuilder withGroupByTime(String timeInterval);
+
+  IDataLakeQueryBuilder withGroupByTime(String timeInterval,
+                                       String offsetInterval);
+
+  IDataLakeQueryBuilder withGroupBy(String column);
+
+  IDataLakeQueryBuilder withOrderBy(DataLakeQueryOrdering ordering);
+
+  IDataLakeQueryBuilder withLimit(int limit);
+
+  IDataLakeQueryBuilder withOffset(int offset);
+
+  T build();
+}

Reply via email to