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