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

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


The following commit(s) were added to refs/heads/rel/0.9 by this push:
     new 97b52c5  [IOTDB-332]support Chinese characters in path (#942)
97b52c5 is described below

commit 97b52c5298f9a89df2c8414c49aa1a5e168fa68e
Author: Ring-k <[email protected]>
AuthorDate: Tue Mar 24 22:23:37 2020 +0800

    [IOTDB-332]support Chinese characters in path (#942)
    
    * support Chinese node name
---
 .../org/apache/iotdb/db/sql/parse/TqlLexer.g       |  2 +-
 .../iotdb/db/qp/plan/LogicalPlanSmallTest.java     | 51 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g 
b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
index c49fb6f..33bf15f 100644
--- a/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
+++ b/server/src/main/antlr3/org/apache/iotdb/db/sql/parse/TqlLexer.g
@@ -420,7 +420,7 @@ EXPONENT : INT ('e'|'E') ('+'|'-')? INT ;
 
     
 ID
-    :  ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-')*
+    :  ('a'..'z'|'A'..'Z'|'_'|'\u2E80'..'\u9FFF') 
('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|'\u2E80'..'\u9FFF')*
     ;
 
 INT
diff --git 
a/server/src/test/java/org/apache/iotdb/db/qp/plan/LogicalPlanSmallTest.java 
b/server/src/test/java/org/apache/iotdb/db/qp/plan/LogicalPlanSmallTest.java
index 07bbe1d..92ec4c5 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/plan/LogicalPlanSmallTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/plan/LogicalPlanSmallTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.qp.plan;
 
+import java.util.ArrayList;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -29,6 +30,7 @@ import org.apache.iotdb.db.qp.logical.RootOperator;
 import org.apache.iotdb.db.qp.logical.crud.QueryOperator;
 import org.apache.iotdb.db.qp.logical.crud.SFWOperator;
 import org.apache.iotdb.db.qp.logical.sys.DeleteStorageGroupOperator;
+import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.qp.strategy.LogicalGenerator;
 import org.apache.iotdb.db.qp.strategy.optimizer.ConcatPathOptimizer;
@@ -207,4 +209,53 @@ public class LogicalPlanSmallTest {
     Assert.assertEquals(path, ((DeleteStorageGroupOperator) 
operator).getDeletePathList().get(0));
   }
 
+
+  @Test
+  public void testChineseCharacter() throws QueryProcessException, 
MetadataException {
+    String sqlStr1 = "set storage group to root.一级";
+    AstNode astTree;
+    try {
+      astTree = ParseGenerator.generateAST(sqlStr1);
+    } catch (ParseException e) {
+      throw new IllegalASTFormatException(sqlStr1, e.getMessage());
+    }
+    AstNode astNode = ParseUtils.findRootNonNullToken(astTree);
+    RootOperator operator = generator.getLogicalPlan(astNode);
+    Assert.assertEquals(SetStorageGroupOperator.class, operator.getClass());
+    Assert.assertEquals(new Path("root.一级"), ((SetStorageGroupOperator) 
operator).getPath());
+
+    String sqlStr2 = "select * from root.一级.设备1 limit 10 offset 20";
+    try {
+      astTree = ParseGenerator.generateAST(sqlStr2);
+    } catch (ParseException e) {
+      throw new IllegalASTFormatException(sqlStr2, e.getMessage());
+    }
+    astNode = ParseUtils.findRootNonNullToken(astTree);
+    operator = generator.getLogicalPlan(astNode);
+    Assert.assertEquals(QueryOperator.class, operator.getClass());
+    ArrayList<Path> paths = new ArrayList<>();
+    paths.add(new Path("*"));
+    Assert.assertEquals(paths, ((QueryOperator) operator).getSelectedPaths());
+
+    String[] sqlStrings = new String[]{
+        "insert into root.\"哈哈\".b(timestamp,c) values(1,2)",
+        "insert into root.a.b(timestamp,\"哈哈\") values(1,2)",
+        "insert into root.a.b(timestamp,\"哈哈\") values(1,\"哈哈\") ",
+        "insert into root.哈哈.b(timestamp,c) values(1,100)",
+        "insert into root.哈哈.b(timestamp,c) values(1,2)",
+        "insert into root.sg.b(timestamp,哈哈) values(1,2)",
+        "insert into root.sg.b(timestamp,\"哈哈\") values(1,2)",
+        "insert into root.sg.b(timestamp,'哈哈') values(1,2)"
+    };
+    for (String s : sqlStrings) {
+      try {
+        astTree = ParseGenerator.generateAST(sqlStr2);
+      } catch (ParseException e) {
+        throw new IllegalASTFormatException(sqlStr2, e.getMessage());
+      }
+      astNode = ParseUtils.findRootNonNullToken(astTree);
+      operator = generator.getLogicalPlan(astNode);
+    }
+  }
+
 }

Reply via email to