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/incubator-iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 9fe3895  support Chinese character (#939)
9fe3895 is described below

commit 9fe389543a2bf456c92ed735d858582b5792ef74
Author: Ring-k <[email protected]>
AuthorDate: Tue Mar 24 20:29:00 2020 +0800

    support Chinese character (#939)
---
 .../org/apache/iotdb/db/qp/strategy/SqlBase.g4     |  9 ++++--
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |  3 --
 .../iotdb/db/qp/plan/LogicalPlanSmallTest.java     | 33 ++++++++++++++++++----
 3 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 
b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
index acf7efc..73120bb 100644
--- a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
+++ b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
@@ -823,20 +823,25 @@ DATETIME
       (('+' | '-') INT ':' INT)?)?
     ;
 /** Allow unicode rule/token names */
-ID : NameChar NameChar*;
+ID : NAME_CHAR NAME_CHAR*;
 
 FILE
     :  (('a'..'z'| 'A'..'Z')(':')?)* (('\\' | '/')+ PATH_FRAGMENT) +
     ;
 
 fragment
-NameChar
+NAME_CHAR
     :   'A'..'Z'
     |   'a'..'z'
     |   '0'..'9'
     |   '_'
+    |   CN_CHAR
     ;
 
+fragment CN_CHAR
+  : '\u2E80'..'\u9FFF'
+  ;
+
 fragment DOUBLE_QUOTE_STRING_LITERAL
     : '"' ('\\' . | ~'"' )*? '"'
     ;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java 
b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
index 3cffb2c..cda3485 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java
@@ -18,11 +18,8 @@
  */
 package org.apache.iotdb.db.qp.constant;
 
-import org.apache.iotdb.tsfile.read.common.Path;
-
 import java.util.HashMap;
 import java.util.Map;
-
 import org.apache.iotdb.db.qp.strategy.SqlBaseLexer;
 import org.apache.iotdb.tsfile.read.common.Path;
 
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 3982d59..fb6e582 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.antlr.v4.runtime.misc.ParseCancellationException;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
@@ -27,6 +28,7 @@ import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.qp.logical.RootOperator;
 import org.apache.iotdb.db.qp.logical.crud.QueryOperator;
 import org.apache.iotdb.db.qp.logical.sys.DeleteStorageGroupOperator;
+import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
 import org.apache.iotdb.db.qp.strategy.ParseDriver;
 import org.apache.iotdb.db.qp.strategy.optimizer.ConcatPathOptimizer;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -195,24 +197,43 @@ public class LogicalPlanSmallTest {
   public void testDisableAlign() {
     String sqlStr = "select * from root.vehicle disable align";
     RootOperator operator = (RootOperator) parseDriver
-            .parse(sqlStr, 
IoTDBDescriptor.getInstance().getConfig().getZoneID());
+        .parse(sqlStr, IoTDBDescriptor.getInstance().getConfig().getZoneID());
     Assert.assertEquals(QueryOperator.class, operator.getClass());
-    Assert.assertFalse(((QueryOperator)operator).isAlignByTime());
+    Assert.assertFalse(((QueryOperator) operator).isAlignByTime());
   }
 
   @Test
   public void testNotDisableAlign() {
     String sqlStr = "select * from root.vehicle";
     RootOperator operator = (RootOperator) parseDriver
-            .parse(sqlStr, 
IoTDBDescriptor.getInstance().getConfig().getZoneID());
+        .parse(sqlStr, IoTDBDescriptor.getInstance().getConfig().getZoneID());
     Assert.assertEquals(QueryOperator.class, operator.getClass());
-    Assert.assertTrue(((QueryOperator)operator).isAlignByTime());
+    Assert.assertTrue(((QueryOperator) operator).isAlignByTime());
   }
 
-  @Test (expected = ParseCancellationException.class)
+  @Test(expected = ParseCancellationException.class)
   public void testDisableAlignConflictAlignByDevice() {
     String sqlStr = "select * from root.vehicle disable align align by device";
     RootOperator operator = (RootOperator) parseDriver
-            .parse(sqlStr, 
IoTDBDescriptor.getInstance().getConfig().getZoneID());
+        .parse(sqlStr, IoTDBDescriptor.getInstance().getConfig().getZoneID());
   }
+
+  @Test
+  public void testChineseCharacter() {
+    String sqlStr1 = "set storage group to root.一级";
+    RootOperator operator = (RootOperator) parseDriver
+        .parse(sqlStr1, IoTDBDescriptor.getInstance().getConfig().getZoneID());
+    Assert.assertEquals(SetStorageGroupOperator.class, operator.getClass());
+    Assert.assertEquals(new Path("root.一级"), ((SetStorageGroupOperator) 
operator).getPath());
+
+    String sqlStr2 = "select * from root.一级.设备1 limit 10 offset 20";
+    operator = (RootOperator) parseDriver
+        .parse(sqlStr2, IoTDBDescriptor.getInstance().getConfig().getZoneID());
+    Assert.assertEquals(QueryOperator.class, operator.getClass());
+    ArrayList<Path> paths = new ArrayList<>();
+    paths.add(new Path("*"));
+    Assert.assertEquals(paths, ((QueryOperator) operator).getSelectedPaths());
+  }
+
+
 }

Reply via email to