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);
+ }
+ }
+
}