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 025fc89ab6b69e71b602bb6193a6bd921dd64090
Author: Lei Rui <[email protected]>
AuthorDate: Sun Jan 28 15:45:24 2024 +0800

    add todos
---
 .../groupby/LocalGroupByExecutorTri_ILTS.java      |  7 +-
 ...ava => LocalGroupByExecutorTri_ILTS_noacc.java} |  4 +-
 .../iotdb/db/integration/tri/MyTest_ILTS.java      | 88 +++++++++++++++++++---
 3 files changed, 86 insertions(+), 13 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
index 893762f5f17..e7c6a8f6f14 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
@@ -75,7 +75,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
 
   private final int N1; // 分桶数
 
-  private static final int numIterations = CONFIG.getNumIterations();
+  private final int numIterations = CONFIG.getNumIterations(); // do not make 
it static
 
   private Filter timeFilter;
 
@@ -128,7 +128,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
         long chunkMaxTime = chunkMetadata.getEndTime();
         int idx1 = (int) Math.floor((chunkMinTime - startTime) * 1.0 / 
interval);
         int idx2 = (int) Math.floor((chunkMaxTime - startTime) * 1.0 / 
interval);
-        idx2 = (int) Math.min(idx2, N1 - 1);
+        idx2 = Math.min(idx2, N1 - 1);
         for (int i = idx1; i <= idx2; i++) {
           splitChunkList.computeIfAbsent(i, k -> new ArrayList<>());
           splitChunkList.get(i).add(chunkSuit4Tri);
@@ -190,6 +190,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
               if (dataType != TSDataType.DOUBLE) {
                 throw new 
UnSupportedDataTypeException(String.valueOf(dataType));
               }
+              // TODO: 用元数据sum&count加速
               // 1. load page data if it hasn't been loaded
               if (chunkSuit4Tri.pageReader == null) {
                 chunkSuit4Tri.pageReader =
@@ -238,6 +239,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
           if (dataType != TSDataType.DOUBLE) {
             throw new UnSupportedDataTypeException(String.valueOf(dataType));
           }
+          // TODO: 用FP&LP&BP&TP形成的rectangle加速
           // load page data if it hasn't been loaded
           if (chunkSuit4Tri.pageReader == null) {
             chunkSuit4Tri.pageReader =
@@ -250,6 +252,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
             //  ASSIGN DIRECTLY), WHICH WILL INTRODUCE BUGS!
           }
           PageReader pageReader = chunkSuit4Tri.pageReader;
+          // TODO: 用凸包bitmap加速
           for (int j = 0; j < 
chunkSuit4Tri.chunkMetadata.getStatistics().getCount(); j++) {
             long timestamp = pageReader.timeBuffer.getLong(j * 8);
             if (timestamp < localCurStartTime) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java
similarity index 99%
copy from 
server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
copy to 
server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java
index 893762f5f17..2ad917909d0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS_noacc.java
@@ -54,7 +54,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class LocalGroupByExecutorTri_ILTS implements GroupByExecutor {
+public class LocalGroupByExecutorTri_ILTS_noacc implements GroupByExecutor {
 
   private static final IoTDBConfig CONFIG = 
IoTDBDescriptor.getInstance().getConfig();
   private static final Logger M4_CHUNK_METADATA = 
LoggerFactory.getLogger("M4_CHUNK_METADATA");
@@ -79,7 +79,7 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
 
   private Filter timeFilter;
 
-  public LocalGroupByExecutorTri_ILTS(
+  public LocalGroupByExecutorTri_ILTS_noacc(
       PartialPath path,
       Set<String> allSensors,
       TSDataType dataType,
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 fe93192c09e..c46c691dac2 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
@@ -73,7 +73,7 @@ public class MyTest_ILTS {
     config.setCompactionStrategy(CompactionStrategy.NO_COMPACTION);
 
     config.setEnableTri("ILTS");
-    config.setNumIterations(4);
+    //    config.setNumIterations(4);
 
     config.setEnableCPV(false);
     TSFileDescriptor.getInstance().getConfig().setEnableMinMaxLSM(false);
@@ -89,9 +89,9 @@ public class MyTest_ILTS {
   }
 
   @Test
-  public void test3_2() {
-    prepareData3_2();
-
+  public void test1() {
+    prepareData1();
+    config.setNumIterations(4);
     String res = "5.0[1],10.0[2],2.0[40],5.0[55],20.0[62],1.0[90],7.0[102],";
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
@@ -122,7 +122,41 @@ public class MyTest_ILTS {
     }
   }
 
-  private static void prepareData3_2() {
+  @Test
+  public void test1_2() {
+    prepareData1();
+    config.setNumIterations(1); // result equals LTTB
+    String res = "5.0[1],10.0[2],2.0[40],15.0[60],18.0[70],1.0[90],7.0[102],";
+    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)"
+                  // TODO not real min_value here, actually controlled by 
enableTri
+                  + " FROM root.vehicle.d0 group by ([2,102),20ms)");
+      // (102-2)/(7-2)=20ms
+      // note keep no empty buckets
+
+      Assert.assertTrue(hasResultSet);
+      try (ResultSet resultSet = statement.getResultSet()) {
+        int i = 0;
+        while (resultSet.next()) {
+          String ans = resultSet.getString(2);
+          // for LTTB all results are in the value string of MinValueAggrResult
+          // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义
+          ans = ans.substring(0, ans.length() - 3);
+          System.out.println(ans);
+          Assert.assertEquals(res, ans);
+        }
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  private static void prepareData1() {
     // data:
     // 
https://user-images.githubusercontent.com/33376433/152003603-6b4e7494-00ff-47e4-bf6e-cab3c8600ce2.png
     // slightly modified
@@ -155,9 +189,9 @@ public class MyTest_ILTS {
   }
 
   @Test
-  public void test3() {
-    prepareData3();
-
+  public void test2() {
+    prepareData2();
+    config.setNumIterations(4);
     String res =
         
"-1.2079272[0],1.101946[200],-0.523204[300],0.145359[500],-1.014322[700],"
             + 
"0.532565[900],-0.122525[1200],-0.676077[1300],0.809559[1500],0.315869[1800],"
@@ -190,7 +224,43 @@ public class MyTest_ILTS {
     }
   }
 
-  private static void prepareData3() {
+  @Test
+  public void test2_2() {
+    prepareData2();
+    config.setNumIterations(1); // result equals LTTB
+    String res =
+        
"-1.2079272[0],1.101946[200],-0.523204[300],0.145359[500],-1.014322[700],0.532565[900],"
+            + "-0.146934[1100],-0.676077[1300],0.809559[1500],0.032211[1700],"
+            + "-0.413534[1900],-0.0211206[2100],";
+    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)"
+                  // TODO not real min_value here, actually controlled by 
enableTri
+                  + " FROM root.vehicle.d0 group by ([100,2100),200ms)");
+      // (tn-t2)/(nout-2)=(2100-100)/(12-2)=2000/10=200
+
+      Assert.assertTrue(hasResultSet);
+      try (ResultSet resultSet = statement.getResultSet()) {
+        int i = 0;
+        while (resultSet.next()) {
+          String ans = resultSet.getString(2);
+          // for LTTB all results are in the value string of MinValueAggrResult
+          // 因此对于LTTB来说,MinValueAggrResult的[t]也无意义
+          ans = ans.substring(0, ans.length() - 3);
+          System.out.println(ans);
+          Assert.assertEquals(res, ans);
+        }
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  private static void prepareData2() {
     try (Connection connection =
             DriverManager.getConnection(
                 Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");

Reply via email to