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

leirui pushed a commit to branch research/LTS-visualization
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 85ce09091447c29409372a37d7d9fcceb96a4952
Author: Lei Rui <[email protected]>
AuthorDate: Mon Jan 29 18:25:18 2024 +0800

    unify sql
---
 .../resources/conf/iotdb-engine.properties         | 12 ++++----
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  2 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  | 23 ++++++++++++---
 .../iotdb/db/integration/tri/MyTest_ILTS.java      |  4 +++
 .../iotdb/db/integration/tri/MyTest_LTTB.java      |  2 ++
 .../apache/iotdb/db/integration/tri/MyTest_M4.java | 34 +++++++++++++---------
 .../iotdb/db/integration/tri/MyTest_MinMax.java    | 27 ++++++++---------
 .../db/integration/tri/MyTest_MinMaxLTTB.java      |  2 ++
 8 files changed, 70 insertions(+), 36 deletions(-)

diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties 
b/server/src/assembly/resources/conf/iotdb-engine.properties
index 80b2c384466..ddc789dba73 100644
--- a/server/src/assembly/resources/conf/iotdb-engine.properties
+++ b/server/src/assembly/resources/conf/iotdb-engine.properties
@@ -22,19 +22,21 @@
 # MinMax, MinMaxLTTB, M4, LTTB, ILTS
 enable_Tri=MinMax
 
+#for
 p1t=0
 p1v=0
 
 pnt=100
 pnv=100
 
-rps=4
+#for MinMaxLTTB
+rps=2
 
-numIterations=8
-
-acc_avg=true
+#for ILTS
+numIterations=4
+acc_avg=false
 acc_rectangle=true
-acc_convex=true
+acc_convex=false
 
 ####################
 ### enable CPV
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 2ffc96bf2d0..5ef77660ae4 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -440,7 +440,7 @@ public class IoTDBConfig {
   private long pnt;
   private double pnv;
 
-  private int rps;
+  private int rps = 2;
 
   public int getNumIterations() {
     return numIterations;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
index c34fd6af987..d2a44f5ce0c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
@@ -224,7 +224,9 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
         List<AggregateResult> aggregations =
             executor.calcResult(
                 localCurStartTime, localCurStartTime + interval, startTime, 
endTime, interval);
+        int c = 0;
         for (AggregateResult aggregation : aggregations) {
+          // ATTENTION only take the first two aggregation fields, which are 
BPv[BPt], TPv[TPt]
           // Each row correspond to (bucketLeftBound, minV[bottomT], 
maxV[topT]) of a MinMax bucket
           MinMaxInfo minMaxInfo = (MinMaxInfo) aggregation.getResult();
           if (minMaxInfo == null) {
@@ -234,6 +236,11 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
             times.add(minMaxInfo.timestamp);
             values.add((Double) minMaxInfo.val);
           }
+          c++;
+          if (c >= 2) {
+            // ATTENTION only take the first two aggregation fields, which are 
BPv[BPt], TPv[TPt]
+            break;
+          }
         }
       }
 
@@ -378,6 +385,8 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
       // concat results into a string
       record = new RowRecord(0);
       StringBuilder series = new StringBuilder();
+      // 全局首点(对于M4来说全局首尾点只是输出不会影响到其它桶的采点)
+      
series.append(CONFIG.getP1v()).append("[").append(CONFIG.getP1t()).append("]").append(",");
 
       for (long localCurStartTime = startTime;
           localCurStartTime + interval <= endTime;
@@ -417,6 +426,9 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
             .append(",");
       }
 
+      // 全局尾点(对于M4来说全局首尾点只是输出不会影响到其它桶的采点)
+      
series.append(CONFIG.getPnv()).append("[").append(CONFIG.getPnt()).append("]").append(",");
+
       // MIN_MAX_INT64 this type for field.setBinaryV(new 
Binary(value.toString()))
       // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, 
TSDataType.MIN_MAX_INT64)
       // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。
@@ -447,6 +459,8 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
       // concat results into a string
       record = new RowRecord(0);
       StringBuilder series = new StringBuilder();
+      // 全局首点(对于MinMax来说全局首尾点只是输出不会影响到其它桶的采点)
+      
series.append(CONFIG.getP1v()).append("[").append(CONFIG.getP1t()).append("]").append(",");
 
       for (long localCurStartTime = startTime;
           localCurStartTime + interval <= endTime;
@@ -464,12 +478,13 @@ public class GroupByWithoutValueFilterDataSet extends 
GroupByEngineDataSet {
                 startTime,
                 endTime,
                 interval); // attention
-        for (AggregateResult aggregation : aggregations) {
-          // Each row correspond to (bucketLeftBound, minV[bottomT], 
maxV[topT]) of a MinMax bucket
-          series.append(aggregation.getResult()).append(",");
-        }
+        series.append(aggregations.get(0).getResult()).append(","); // BPv[BPt]
+        series.append(aggregations.get(1).getResult()).append(","); // TPv[TPt]
       }
 
+      // 全局尾点(对于MinMax来说全局首尾点只是输出不会影响到其它桶的采点)
+      
series.append(CONFIG.getPnv()).append("[").append(CONFIG.getPnt()).append("]").append(",");
+
       // MIN_MAX_INT64 this type for field.setBinaryV(new 
Binary(value.toString()))
       // 注意sql第一项一定要是min_value因为以后会用到record.addField(series, 
TSDataType.MIN_MAX_INT64)
       // 把所有序列组装成string放在第一行第二列里,否则field类型和TSDataType.MIN_MAX_INT64对不上的会有问题。
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java
index 87bba5c8603..59bf45b5c82 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_ILTS.java
@@ -107,6 +107,7 @@ public class MyTest_ILTS {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([2,102),20ms)");
       // (102-2)/(7-2)=20ms
       // note keep no empty buckets
@@ -138,6 +139,7 @@ public class MyTest_ILTS {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([2,102),20ms)");
       // (102-2)/(7-2)=20ms
       // note keep no empty buckets
@@ -204,6 +206,7 @@ public class MyTest_ILTS {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([100,2100),200ms)");
       // (tn-t2)/(nout-2)=(2100-100)/(12-2)=2000/10=200
 
@@ -238,6 +241,7 @@ public class MyTest_ILTS {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([100,2100),200ms)");
       // (tn-t2)/(nout-2)=(2100-100)/(12-2)=2000/10=200
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java
index 0354dcb57cf..542a9037c27 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_LTTB.java
@@ -107,6 +107,7 @@ public class MyTest_LTTB {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([2,106),26ms)");
 
       Assert.assertTrue(hasResultSet);
@@ -170,6 +171,7 @@ public class MyTest_LTTB {
           statement.execute(
               "SELECT min_value(s0)"
                   // TODO not real min_value here, actually controlled by 
enableTri
+                  + ",max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([100,2100),250ms)");
       // (tn-t2)/(nout-2)=(2100-100)/(10-2)=2000/8=250
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java
index 4cc39f797d3..0c30926deaa 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_M4.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.compaction.CompactionStrategy;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
+import org.apache.iotdb.jdbc.IoTDBStatement;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 
 import org.junit.After;
@@ -77,6 +78,11 @@ public class MyTest_M4 {
     config.setCompactionStrategy(CompactionStrategy.NO_COMPACTION);
 
     config.setEnableTri("M4");
+    // 对于M4来说全局首尾点只是输出不会影响到其它桶的采点
+    config.setP1t(0);
+    config.setP1v(0);
+    config.setPnt(200);
+    config.setPnv(200);
 
     // 但是如果走的是unpackOneChunkMetaData(firstChunkMetadata)就没问题,
     // 因为它直接用chunk元数据去构造pageReader,
@@ -102,13 +108,15 @@ public class MyTest_M4 {
   public void test1() throws Exception {
     prepareData1();
     String res =
-        
"1.0[20],15.0[2],5.0[1],1.0[20],8.0[25],8.0[25],8.0[25],8.0[25],3.0[54],3.0[54],3.0[54],3.0[54],null,null,null[null],null[null],";
+        
"0.0[0],1.0[20],15.0[2],5.0[1],1.0[20],8.0[25],8.0[25],8.0[25],8.0[25],3.0[54],"
+            + 
"3.0[54],3.0[54],3.0[54],null,null,null[null],null[null],200.0[200],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
               "SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
+                  // do not change sequence
                   + " FROM root.vehicle.d0 group by ([0,100),25ms)");
       // 注意需要第一项是min_value因为以后会用到record.addField(series,
       // TSDataType.MIN_MAX_INT64)把所有序列组装成string放在第一行第二列里
@@ -161,25 +169,24 @@ public class MyTest_M4 {
     prepareData3();
 
     String res =
-        
"1.0[10],10.0[2],5.0[1],4.0[22],2.0[40],8.0[30],8.0[30],2.0[40],4.0[72],20.0[62],5.0[55],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],";
+        
"0.0[0],1.0[10],10.0[2],5.0[1],4.0[22],2.0[40],8.0[30],8.0[30],2.0[40],"
+            + 
"4.0[72],20.0[62],5.0[55],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],200.0[200],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
-      boolean hasResultSet =
-          statement.execute(
+      ResultSet resultSet =
+          statement.executeQuery(
               "SELECT min_value(s0), max_value(s0),min_time(s0), max_time(s0), 
first_value(s0), last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([0,100),25ms)"); // don't 
change the
       // sequence!!!
 
-      Assert.assertTrue(hasResultSet);
-      try (ResultSet resultSet = statement.getResultSet()) {
-        int i = 0;
-        while (resultSet.next()) {
-          String ans = resultSet.getString(2);
-          System.out.println(ans);
-          Assert.assertEquals(res, ans);
-        }
+      int i = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(2);
+        System.out.println(ans);
+        Assert.assertEquals(res, ans);
       }
+      System.out.println(((IoTDBStatement) statement).executeFinish());
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());
@@ -231,7 +238,8 @@ public class MyTest_M4 {
     prepareData3_2();
 
     String res =
-        
"1.0[10],10.0[2],5.0[1],5.0[20],null,null,null[null],null[null],4.0[72],20.0[62],15.0[60],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],";
+        
"0.0[0],1.0[10],10.0[2],5.0[1],5.0[20],null,null,null[null],null[null],4.0[72],"
+            + 
"20.0[62],15.0[60],4.0[72],1.0[90],11.0[80],11.0[80],1.0[90],200.0[200],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java
index 06b0432142d..a6f76b440ed 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMax.java
@@ -74,6 +74,11 @@ public class MyTest_MinMax {
     config.setCompactionStrategy(CompactionStrategy.NO_COMPACTION);
 
     config.setEnableTri("MinMax");
+    // 对于MinMax来说全局首尾点只是输出不会影响到其它桶的采点
+    config.setP1t(0);
+    config.setP1v(0);
+    config.setPnt(200);
+    config.setPnv(200);
 
     // 但是如果走的是unpackOneChunkMetaData(firstChunkMetadata)就没问题,
     // 因为它直接用chunk元数据去构造pageReader,
@@ -98,16 +103,15 @@ public class MyTest_MinMax {
   @Test
   public void test1() throws Exception {
     prepareData1();
-    //    String[] res = new String[]{"0,1[20],15[2]", "25,8[25],8[25]", 
"50,3[54],3[54]",
-    // "75,null,null"};
-    String res = "1.0[20],15.0[2],8.0[25],8.0[25],3.0[54],3.0[54],null,null,";
-    // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,...
+    String res = 
"0.0[0],1.0[20],15.0[2],8.0[25],8.0[25],3.0[54],3.0[54],null,null,200.0[200],";
+    // 
0,P1v[P1t],BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,...,Pnv[Pnt]
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
-              "SELECT min_value(s0), max_value(s0)"
+              "SELECT min_value(s0), max_value(s0)" // do not change sequence
+                  + ",min_time(s0), max_time(s0), first_value(s0), 
last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([0,100),25ms)");
       Assert.assertTrue(hasResultSet);
       try (ResultSet resultSet = statement.getResultSet()) {
@@ -157,16 +161,15 @@ public class MyTest_MinMax {
   public void test3() {
     prepareData3();
 
-    //    String[] res = new String[]{"0,1[10],10[2]", "25,2[40],8[30]", 
"50,4[72],20[62]",
-    // "75,1[90],11[80]"};
-    String res = 
"1.0[10],10.0[2],2.0[40],8.0[30],4.0[72],20.0[62],1.0[90],11.0[80],";
-    // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,...
+    String res =
+        
"0.0[0],1.0[10],10.0[2],2.0[40],8.0[30],4.0[72],20.0[62],1.0[90],11.0[80],200.0[200],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
               "SELECT min_value(s0), max_value(s0)"
+                  + ",min_time(s0), max_time(s0), first_value(s0), 
last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([0,100),25ms)"); // don't 
change the
       // sequence!!!
 
@@ -229,16 +232,14 @@ public class MyTest_MinMax {
   public void test3_2() {
     prepareData3_2();
 
-    //    String[] res = new String[]{"0,1[10],10[2]", "25,null,null", 
"50,4[72],20[62]",
-    // "75,1[90],11[80]"};
-    String res = 
"1.0[10],10.0[2],null,null,4.0[72],20.0[62],1.0[90],11.0[80],";
-    // 0,BPv[t]ofBucket1,TPv[t]ofBucket1,BPv[t]ofBucket2,TPv[t]ofBucket2,...
+    String res = 
"0.0[0],1.0[10],10.0[2],null,null,4.0[72],20.0[62],1.0[90],11.0[80],200.0[200],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
               "SELECT min_value(s0), max_value(s0)"
+                  + ",min_time(s0), max_time(s0), first_value(s0), 
last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([0,100),25ms)"); // don't 
change the
       // sequence!!!
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java
 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java
index 3d3491cccb7..160df95c60d 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/integration/tri/MyTest_MinMaxLTTB.java
@@ -108,6 +108,8 @@ public class MyTest_MinMaxLTTB {
       boolean hasResultSet =
           statement.execute(
               "SELECT min_value(s0), max_value(s0)"
+                  // actually controlled by enableTri
+                  + ",min_time(s0), max_time(s0), first_value(s0), 
last_value(s0)"
                   + " FROM root.vehicle.d0 group by ([100,2100),250ms)");
       // rps=4,nout=6,minmaxInterval=floor((tn-t2)/((nout-2)*rps/2))=250ms
       Assert.assertTrue(hasResultSet);

Reply via email to