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 2021/05/10 06:09:45 UTC

[iotdb] branch master updated: [ISSUE-3089] make it possible for storage groups to have name with hyphen (#3151)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new f4db723  [ISSUE-3089] make it possible for storage groups to have name with hyphen (#3151)
f4db723 is described below

commit f4db723a8c0cbd66801aed9792c897ac07c4b618
Author: xuesyn <43...@users.noreply.github.com>
AuthorDate: Mon May 10 14:09:19 2021 +0800

    [ISSUE-3089] make it possible for storage groups to have name with hyphen (#3151)
---
 .../Data-Concept/Data-Model-and-Terminology.md     |  4 +--
 .../DDL-Data-Definition-Language.md                |  2 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |  4 +--
 .../DDL-Data-Definition-Language.md                |  2 +-
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  2 +-
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 36 ++++++++++++++++++++++
 .../iotdb/db/metadata/MManagerBasicTest.java       | 17 ++++++++++
 7 files changed, 60 insertions(+), 7 deletions(-)

diff --git a/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md b/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md
index 98043ae..4f0a5e8 100644
--- a/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md
+++ b/docs/UserGuide/Data-Concept/Data-Model-and-Terminology.md
@@ -61,7 +61,7 @@ Once a prefix path is set as a storage group, the storage group settings cannot
 
 After a storage group is set, all parent and child layers of the corresponding prefix path are not allowed to be set up again (for example, after `root.ln` is set as the storage group, the root layer and `root.ln.wf01` are not allowed to be set as storage groups).
 
-The Layer Name of storage group can only consist of characters, numbers and underscores, like `root.storagegroup_1`.
+The Layer Name of storage group can only consist of characters, numbers, underscores and hyphen, like `root.storagegroup_1-sg1`.
 
 * Path
 
@@ -89,7 +89,7 @@ The characters supported in LayerName without double quotes are as below:
 
 '-' and ':' cannot be the first character. '+' cannot use alone.
 
-> Note: the LayerName of storage group can only be characters, numbers and underscores. 
+> Note: the LayerName of storage group can only be characters, numbers, underscores and hyphen. 
 > 
 > Besides, if deploy on Windows system, the LayerName is case-insensitive, which means it's not allowed to set storage groups `root.ln` and `root.LN` at the same time.
 
diff --git a/docs/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md b/docs/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
index 33622ec..e2fe36c 100644
--- a/docs/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
+++ b/docs/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
@@ -41,7 +41,7 @@ It is worth noting that when the path itself or the parent/child layer of the pa
 IoTDB> set storage group to root.ln.wf01
 Msg: 300: root.ln has already been set to storage group.
 ```
-The LayerName of storage group can only be characters, numbers and underscores. 
+The LayerName of storage group can only be characters, numbers, underscores and hyphens. 
  
 Besides, if deploy on Windows system, the LayerName is case-insensitive, which means it's not allowed to set storage groups `root.ln` and `root.LN` at the same time.
 
diff --git a/docs/zh/UserGuide/Data-Concept/Data-Model-and-Terminology.md b/docs/zh/UserGuide/Data-Concept/Data-Model-and-Terminology.md
index ec7f533..469442f 100644
--- a/docs/zh/UserGuide/Data-Concept/Data-Model-and-Terminology.md
+++ b/docs/zh/UserGuide/Data-Concept/Data-Model-and-Terminology.md
@@ -59,7 +59,7 @@
 
 一个存储组设定后,其对应的前缀路径的所有父层级与子层级也不允许再设置存储组(如,`root.ln`设置存储组后,root层级与`root.ln.wf01`不允许被设置为存储组)。
 
-存储组节点名只支持中英文字符、数字和下划线的组合。例如`root.存储组_1` 。
+存储组节点名只支持中英文字符、数字、下划线和中划线的组合。例如`root.存储组_1-组1` 。
 
 
 * 路径
@@ -87,7 +87,7 @@ LayerName: Identifier | STAR
 
 其中'-' 和 ':' 不能放置在第一位,不能使用单个 '+'。
 
-> 注意: storage group中的LayerName只支持数字,字母,汉字和下划线。另外,如果在Windows系统上部署,存储组层级名称是大小写不敏感的。例如同时创建`root.ln` 和 `root.LN` 是不被允许的。
+> 注意: storage group中的LayerName只支持数字,字母,汉字,下划线和中划线。另外,如果在Windows系统上部署,存储组层级名称是大小写不敏感的。例如同时创建`root.ln` 和 `root.LN` 是不被允许的。
 
 * 时间序列
 
diff --git a/docs/zh/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md b/docs/zh/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
index 1ec7a865..fd369e3 100644
--- a/docs/zh/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
+++ b/docs/zh/UserGuide/IoTDB-SQL-Language/DDL-Data-Definition-Language.md
@@ -42,7 +42,7 @@ IoTDB > set storage group to root.sgcc
 IoTDB> set storage group to root.ln.wf01
 Msg: 300: root.ln has already been set to storage group.
 ```
-存储组节点名只支持中英文字符、数字和下划线的组合。
+存储组节点名只支持中英文字符、数字、下划线和中划线的组合。
 
 还需注意,如果在Windows系统上部署,存储组名是大小写不敏感的。例如同时创建`root.ln` 和 `root.LN` 是不被允许的。
 
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 0c9583a..a21e783 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
@@ -56,7 +56,7 @@ public class IoTDBConfig {
   private static final String ID_MATCHER =
       "([a-zA-Z0-9/\"[ ],:@#$%&{}()*=?!~\\[\\]\\-+\\u2E80-\\u9FFF_]+)";
 
-  private static final String STORAGE_GROUP_MATCHER = "([a-zA-Z0-9_.\\u2E80-\\u9FFF]+)";
+  private static final String STORAGE_GROUP_MATCHER = "([a-zA-Z0-9_.\\-\\u2E80-\\u9FFF]+)";
 
   // e.g.,  .s1
   private static final String PARTIAL_NODE_MATCHER = "[" + PATH_SEPARATOR + "]" + ID_MATCHER;
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
index 02cb24a..16c68af 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
@@ -35,6 +35,7 @@ import org.junit.Test;
 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.ArrayList;
@@ -1244,4 +1245,39 @@ public class IoTDBSimpleQueryIT {
       fail();
     }
   }
+
+  @Test
+  public void testStorageGroupWithHyphenInName() throws ClassNotFoundException, MetadataException {
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+            DriverManager.getConnection(
+                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      statement.setFetchSize(5);
+      statement.execute("SET STORAGE GROUP TO root.group-with-hyphen");
+    } catch (SQLException e) {
+      fail();
+    }
+
+    try (Connection connection =
+            DriverManager.getConnection(
+                Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      boolean hasResultSet = statement.execute("SHOW STORAGE GROUP");
+      if (hasResultSet) {
+        try (ResultSet resultSet = statement.getResultSet()) {
+          ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+          while (resultSet.next()) {
+            StringBuilder builder = new StringBuilder();
+            for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+              builder.append(resultSet.getString(i));
+            }
+            Assert.assertEquals(builder.toString(), "root.group-with-hyphen");
+          }
+        }
+      }
+    } catch (SQLException e) {
+      fail();
+    }
+  }
 }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 1237bef..1e86e89 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -1317,4 +1317,21 @@ public class MManagerBasicTest {
       fail(e.getMessage());
     }
   }
+
+  @Test
+  public void testStorageGroupNameWithHyphen() throws IllegalPathException {
+    MManager manager = IoTDB.metaManager;
+    assertTrue(manager.isPathExist(new PartialPath("root")));
+
+    assertFalse(manager.isPathExist(new PartialPath("root.group-with-hyphen")));
+
+    try {
+      manager.setStorageGroup(new PartialPath("root.group-with-hyphen"));
+    } catch (MetadataException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+
+    assertTrue(manager.isPathExist(new PartialPath("root.group-with-hyphen")));
+  }
 }