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

kangrong pushed a commit to branch f_index_dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/f_index_dev by this push:
     new f07e992  add ELB update test
f07e992 is described below

commit f07e992c574d18cd56d273e09589e77c3f956f8b
Author: kr11 <3095717866.com>
AuthorDate: Tue May 18 00:45:55 2021 +0800

    add ELB update test
---
 .../iotdb/db/index/algorithm/elb/ELBIndex.java     |   6 +-
 .../org/apache/iotdb/db/index/IndexTestUtils.java  |  39 ++++++++
 .../apache/iotdb/db/index/it/DemoELBWindIT.java    | 100 ++++++++++++++-------
 3 files changed, 108 insertions(+), 37 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java 
b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
index c57d3e3..a0d2b83 100644
--- a/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
+++ b/server/src/main/java/org/apache/iotdb/db/index/algorithm/elb/ELBIndex.java
@@ -428,9 +428,9 @@ public class ELBIndex extends IoTDBIndex {
   }
 
   private List<Filter> queryByIndex(ELBQueryStruct struct, 
SubMatchIndexUsability indexUsable) {
-    if (indexUsable.hasUnusableRange()) {
-      logger.warn("In current version, ELB will ignore the out-of-order data");
-    }
+    //    if (indexUsable.hasUnusableRange()) {
+    //      logger.warn("In current version, ELB will ignore the out-of-order 
data");
+    //    }
     IIndexUsable cannotPruned = 
IIndexUsable.Factory.createEmptyIndexUsability(indexSeries);
     cannotPruned.minusUsableRange(indexSeries, Long.MIN_VALUE, Long.MAX_VALUE);
     int wbfSize = windowBlockFeatures.size();
diff --git a/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java 
b/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
index 62c9ce1..23568cb 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/IndexTestUtils.java
@@ -25,6 +25,12 @@ import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.utils.Pair;
 
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.List;
 
 import static org.apache.iotdb.db.index.common.IndexConstant.INDEXED_SUFFIX;
@@ -160,5 +166,38 @@ public class IndexTestUtils {
   //        throw new UnsupportedOperationException();
   //    }
   //  }
+  public static void executeNonQuerySQL(String sql) throws SQLException {
+    try (Connection connection =
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
+        Statement statement = connection.createStatement()) {
+      statement.execute(sql);
+    }
+  }
 
+  public static String executeQuerySQL(Statement statement, String sql, 
boolean onlyHeader)
+      throws SQLException {
+    boolean hasResult = statement.execute(sql);
+    if (!hasResult) {
+      return null;
+    } else {
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          sb.append(resultSetMetaData.getColumnName(i)).append(",");
+        }
+        sb.append("\n");
+        if (!onlyHeader) {
+          while (resultSet.next()) {
+            for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+              sb.append(resultSet.getString(i)).append(",");
+            }
+            sb.append("\n");
+          }
+        }
+        return sb.toString();
+        //        Assert.assertEquals(gt, sb.toString());
+      }
+    }
+  }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/index/it/DemoELBWindIT.java 
b/server/src/test/java/org/apache/iotdb/db/index/it/DemoELBWindIT.java
index b3d7371..ed55828 100644
--- a/server/src/test/java/org/apache/iotdb/db/index/it/DemoELBWindIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/index/it/DemoELBWindIT.java
@@ -19,6 +19,7 @@
 package org.apache.iotdb.db.index.it;
 
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.index.IndexTestUtils;
 import org.apache.iotdb.db.rescon.TVListAllocator;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.db.utils.datastructure.TVList;
@@ -33,10 +34,9 @@ import org.junit.Test;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
 import java.sql.Statement;
 import java.time.ZoneId;
 import java.util.ArrayList;
@@ -82,7 +82,8 @@ public class DemoELBWindIT {
     IoTDBDescriptor.getInstance().getConfig().setEnableIndex(false);
   }
 
-  private static void insertSQL(boolean createTS) throws 
ClassNotFoundException {
+  private static void insertSQL(boolean createTS, boolean flushAtLast, boolean 
ignoreTimestamp)
+      throws ClassNotFoundException {
     Class.forName(Config.JDBC_DRIVER_NAME);
     try (Connection connection =
             DriverManager.getConnection(
@@ -121,7 +122,6 @@ public class DemoELBWindIT {
             String[] data = row.split(",");
             long t = Long.parseLong(data[0]);
             float v = Float.parseFloat(data[1]);
-
             subInput.putFloat(t, v);
             //            subInput.putFloat(idx, v);
           }
@@ -149,13 +149,15 @@ public class DemoELBWindIT {
                 RpcUtils.formatDatetime(
                     "iso8601",
                     RpcUtils.DEFAULT_TIMESTAMP_PRECISION,
-                    subInput.getTime(i),
+                    ignoreTimestamp ? i : subInput.getTime(i),
                     ZoneId.systemDefault()),
                 subInput.getFloat(i));
         statement.execute(insertSQL);
         //        System.out.println(insertSQL);
       }
-      statement.execute("flush");
+      if (flushAtLast) {
+        statement.execute("flush");
+      }
       //      System.out.println("==========================");
       //      System.out.println(IndexManager.getInstance().getRouter());
 
@@ -171,20 +173,48 @@ public class DemoELBWindIT {
   }
 
   private void checkRead(boolean createTS) throws ClassNotFoundException {
-    insertSQL(createTS);
+    insertSQL(createTS, true, false);
     Class.forName(Config.JDBC_DRIVER_NAME);
     try (Connection connection =
             DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
         Statement statement = connection.createStatement()) {
-      String queryPath = 
"/Users/kangrong/tsResearch/tols/JINFENG/d2/out_sub_pattern.csv";
-      List<Float> pattern = new ArrayList<>();
-      try (BufferedReader csvReader = new BufferedReader(new 
FileReader(queryPath))) {
-        String row;
-        while ((row = csvReader.readLine()) != null) {
-          float v = Float.parseFloat(row);
-          pattern.add(v);
-        }
+      List<Float> pattern = loadSubSeries();
+      String querySQL =
+          "SELECT speed.* FROM root.wind1.azq01 WHERE Speed "
+              + String.format("CONTAIN (%s) WITH TOLERANCE 10 ", 
getStringFromList(pattern, 0, 30))
+              + String.format("CONCAT (%s) WITH TOLERANCE 20 ", 
getStringFromList(pattern, 30, 70))
+              + String.format(
+                  "CONCAT (%s) WITH TOLERANCE 10 ", getStringFromList(pattern, 
70, 100));
+      System.out.println(querySQL);
+      System.out.println(IndexTestUtils.executeQuerySQL(statement, querySQL, 
false));
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  private List<Float> loadSubSeries() throws IOException {
+    String queryPath = 
"/Users/kangrong/tsResearch/tols/JINFENG/d2/out_sub_pattern.csv";
+    List<Float> pattern = new ArrayList<>();
+    try (BufferedReader csvReader = new BufferedReader(new 
FileReader(queryPath))) {
+      String row;
+      while ((row = csvReader.readLine()) != null) {
+        float v = Float.parseFloat(row);
+        pattern.add(v);
       }
+    }
+    return pattern;
+  }
+
+  @Test
+  public void updateELB() throws ClassNotFoundException {
+    insertSQL(true, true, true);
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
+        Statement statement = connection.createStatement()) {
+      List<Float> pattern = loadSubSeries();
       String querySQL =
           "SELECT speed.* FROM root.wind1.azq01 WHERE Speed "
               + String.format("CONTAIN (%s) WITH TOLERANCE 10 ", 
getStringFromList(pattern, 0, 30))
@@ -193,25 +223,27 @@ public class DemoELBWindIT {
                   "CONCAT (%s) WITH TOLERANCE 10 ", getStringFromList(pattern, 
70, 100));
       System.out.println(querySQL);
       statement.setQueryTimeout(200);
-      boolean hasIndex = statement.execute(querySQL);
-      //      String gt = "Time,root.wind1.azq01.speed.17,\n";
-      Assert.assertTrue(hasIndex);
-      try (ResultSet resultSet = statement.getResultSet()) {
-        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
-        StringBuilder sb = new StringBuilder();
-        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-          sb.append(resultSetMetaData.getColumnName(i)).append(",");
-        }
-        sb.append("\n");
-        while (resultSet.next()) {
-          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
-            sb.append(resultSet.getString(i)).append(",");
-          }
-          sb.append("\n");
-        }
-        System.out.println(sb);
-        //        Assert.assertEquals(gt, sb.toString());
-      }
+      //      System.out.println(IndexTestUtils.executeQuerySQL(statement, 
querySQL, false));
+      Assert.assertEquals(
+          
"Time,root.wind1.azq01.speed.1197,root.wind1.azq01.speed.6685,root.wind1.azq01.speed.7595,\n",
+          IndexTestUtils.executeQuerySQL(statement, querySQL, true));
+      String breakFirstSegment =
+          String.format(
+              insertPattern_show,
+              speed1Device,
+              speed1Sensor,
+              RpcUtils.formatDatetime(
+                  "iso8601", RpcUtils.DEFAULT_TIMESTAMP_PRECISION, 1255L, 
ZoneId.systemDefault()),
+              1000000.);
+      statement.execute(breakFirstSegment);
+      // before flush, nothing happened
+      //      Assert.assertEquals(
+      //          "Time,root.wind1.azq01.speed.1417403212000,"
+      //              + "root.wind1.azq01.speed.1417434633000,"
+      //              + "root.wind1.azq01.speed.1417439612000,\n",
+      //          IndexTestUtils.executeQuerySQL(statement, querySQL, true));
+      //
+      System.out.println(IndexTestUtils.executeQuerySQL(statement, querySQL, 
false));
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());

Reply via email to