You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/11/07 04:31:14 UTC

[iotdb] branch rel/0.11 updated: IOTDB-986 when path node is empty, throw an exception (#1965)

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

qiaojialin pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.11 by this push:
     new ac1c54c  IOTDB-986 when path node is empty, throw an exception (#1965)
ac1c54c is described below

commit ac1c54c693eee84bc864e05c296f7b94517f0939
Author: Boris <ge...@apache.org>
AuthorDate: Sat Nov 7 11:48:09 2020 +0800

    IOTDB-986 when path node is empty, throw an exception (#1965)
    
    (cherry picked from commit e5418c4b026701371c816f7d516695e681df8206)
---
 .../org/apache/iotdb/db/metadata/MetaUtils.java    | 18 +++++--
 .../apache/iotdb/db/metadata/MetaUtilsTest.java    | 24 ++++++----
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 56 ++++++++++++++++++++++
 3 files changed, 86 insertions(+), 12 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java
index ee3ad25..3d0d044 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MetaUtils.java
@@ -46,7 +46,11 @@ public class MetaUtils {
     int startIndex = 0;
     for (int i = 0; i < path.length(); i++) {
       if (path.charAt(i) == IoTDBConstant.PATH_SEPARATOR) {
-        nodes.add(path.substring(startIndex, i));
+        String node = path.substring(startIndex, i);
+        if(node.isEmpty()) {
+          throw new IllegalPathException("Node can't be empty");
+        }
+        nodes.add(node);
         startIndex = i + 1;
       } else if (path.charAt(i) == '"') {
         int endIndex = path.indexOf('"', i + 1);
@@ -55,7 +59,11 @@ public class MetaUtils {
           endIndex = path.indexOf('"', endIndex + 1);
         }
         if (endIndex != -1 && (endIndex == path.length() - 1 || path.charAt(endIndex + 1) == '.')) {
-          nodes.add(path.substring(startIndex, endIndex + 1));
+          String node = path.substring(startIndex, endIndex + 1);
+          if(node.isEmpty()) {
+            throw new IllegalPathException("Node can't be empty");
+          }
+          nodes.add(node);
           i = endIndex + 1;
           startIndex = endIndex + 2;
         } else {
@@ -66,7 +74,11 @@ public class MetaUtils {
       }
     }
     if (startIndex <= path.length() - 1) {
-      nodes.add(path.substring(startIndex));
+      String node = path.substring(startIndex);
+      if(node.isEmpty()) {
+        throw new IllegalPathException("Node can't be empty");
+      }
+      nodes.add(node);
     }
     return nodes.toArray(new String[0]);
   }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java
index 18f260b..d5df6a4 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MetaUtilsTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.iotdb.db.metadata;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
 
 import java.util.Arrays;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
@@ -29,24 +29,24 @@ public class MetaUtilsTest {
 
   @Test
   public void testSplitPathToNodes() throws IllegalPathException {
-    assertEquals(Arrays.asList("root", "sg", "d1", "s1").toArray(),
+    assertArrayEquals(Arrays.asList("root", "sg", "d1", "s1").toArray(),
         MetaUtils.splitPathToDetachedPath("root.sg.d1.s1"));
 
-    assertEquals(Arrays.asList("root", "sg", "d1", "\"s.1\"").toArray(),
+    assertArrayEquals(Arrays.asList("root", "sg", "d1", "\"s.1\"").toArray(),
         MetaUtils.splitPathToDetachedPath("root.sg.d1.\"s.1\""));
 
-    assertEquals(Arrays.asList("root", "sg", "d1", "\"s\\\".1\"").toArray(),
+    assertArrayEquals(Arrays.asList("root", "sg", "d1", "\"s\\\".1\"").toArray(),
         MetaUtils.splitPathToDetachedPath("root.sg.d1.\"s\\\".1\""));
 
-    assertEquals(Arrays.asList("root", "\"s g\"", "d1", "\"s.1\"").toArray(),
+    assertArrayEquals(Arrays.asList("root", "\"s g\"", "d1", "\"s.1\"").toArray(),
         MetaUtils.splitPathToDetachedPath("root.\"s g\".d1.\"s.1\""));
 
-    assertEquals(Arrays.asList("root", "\"s g\"", "\"d_.1\"", "\"s.1.1\"").toArray(),
+    assertArrayEquals(Arrays.asList("root", "\"s g\"", "\"d_.1\"", "\"s.1.1\"").toArray(),
         MetaUtils.splitPathToDetachedPath("root.\"s g\".\"d_.1\".\"s.1.1\""));
 
-    assertEquals(Arrays.asList("root", "1").toArray(), MetaUtils.splitPathToDetachedPath("root.1"));
+    assertArrayEquals(Arrays.asList("root", "1").toArray(), MetaUtils.splitPathToDetachedPath("root.1"));
 
-    assertEquals(Arrays.asList("root", "sg", "d1", "s", "1").toArray(),
+    assertArrayEquals(Arrays.asList("root", "sg", "d1", "s", "1").toArray(),
         MetaUtils.splitPathToDetachedPath("root.sg.d1.s.1"));
 
     try {
@@ -56,7 +56,13 @@ public class MetaUtilsTest {
     }
 
     try {
-      MetaUtils.splitPathToDetachedPath("root.sg.d1.\'s1\'");
+      MetaUtils.splitPathToDetachedPath("root..a");
+    } catch (IllegalPathException e) {
+      Assert.assertTrue(e.getMessage().contains("Node can't be empty"));
+    }
+
+    try {
+      MetaUtils.splitPathToDetachedPath("root.sg.d1.'s1'");
     } catch (IllegalPathException e) {
       Assert.assertTrue(e.getMessage().contains("Illegal path with single quote: "));
     }
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
index cbabbc8..63ea32f 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -134,6 +134,36 @@ public class IoTDBSessionSimpleIT {
   }
 
   @Test
+  public void testInsertWrongPathByStrAndInferType()
+      throws IoTDBConnectionException, StatementExecutionException {
+    session = new Session("127.0.0.1", 6667, "root", "root");
+    session.open();
+
+    String deviceId = "root.sg1..d1";
+    List<String> measurements = new ArrayList<>();
+    measurements.add("s1");
+    measurements.add("s2");
+    measurements.add("s3");
+    measurements.add("s4");
+
+    List<String> values = new ArrayList<>();
+    values.add("1");
+    values.add("1.2");
+    values.add("true");
+    values.add("dad");
+    try {
+      session.insertRecord(deviceId, 1L, measurements, values);
+    } catch (Exception e) {
+      logger.error("" ,e);
+    }
+    
+    SessionDataSet dataSet = session.executeQueryStatement("show timeseries root");
+    Assert.assertFalse(dataSet.hasNext());
+
+    session.close();
+  }
+
+  @Test
   public void testInsertByObjAndNotInferType()
       throws IoTDBConnectionException, StatementExecutionException {
     session = new Session("127.0.0.1", 6667, "root", "root");
@@ -285,4 +315,30 @@ public class IoTDBSessionSimpleIT {
     session.deleteStorageGroup(storageGroup);
     session.close();
   }
+
+  @Test
+  public void createWrongTimeSeries() throws IoTDBConnectionException, StatementExecutionException {
+    session = new Session("127.0.0.1", 6667, "root", "root");
+    session.open();
+    if (!System.getProperty("sun.jnu.encoding").contains("UTF-8")) {
+      logger.error("The system does not support UTF-8, so skip Chinese test...");
+      session.close();
+      return;
+    }
+    String storageGroup = "root.sg";
+    session.setStorageGroup(storageGroup);
+
+    try {
+      session.createTimeseries("root.sg.d1..s1", TSDataType.INT64, TSEncoding.RLE,
+          CompressionType.SNAPPY);
+    } catch (IoTDBConnectionException | StatementExecutionException e) {
+      logger.error("",e);
+    }
+
+    final SessionDataSet dataSet = session.executeQueryStatement("SHOW TIMESERIES");
+    assertFalse(dataSet.hasNext());
+
+    session.deleteStorageGroup(storageGroup);
+    session.close();
+  }
 }