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

rong pushed a commit to branch iotdb-1620
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 478e88d9fbea966b3d470e73b9ce82edb3002954
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Oct 27 12:10:58 2021 +0800

    Syntax-Conventions CN
---
 .gitignore                                         |  1 +
 .../IoTDB-SQL-Language/Syntax-Conventions.md       | 90 +++++++++++++++++++++-
 2 files changed, 89 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index 491b7cc..31c481f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -112,3 +112,4 @@ node3/
 # ANTLR
 antlr/gen/
 antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/gen/
+antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlLexer.tokens
diff --git a/docs/zh/UserGuide/IoTDB-SQL-Language/Syntax-Conventions.md 
b/docs/zh/UserGuide/IoTDB-SQL-Language/Syntax-Conventions.md
index 1175f85..7396c5e 100644
--- a/docs/zh/UserGuide/IoTDB-SQL-Language/Syntax-Conventions.md
+++ b/docs/zh/UserGuide/IoTDB-SQL-Language/Syntax-Conventions.md
@@ -21,9 +21,95 @@
 
 # 语法约定
 
-## ID 中的 双引号(\")、反引号(\`)
+## 双引号(\")、反引号(\`)
+
+双引号和反引号内引用的字符串被解释为标识符(ID),被引用的字符串一般包含特殊字符。需要注意的是,被引用的字符串不可带有 `.` 字符。
+
+标识符(ID)的定义为:
+
+```sql
+ID
+    : NAME_CHAR+
+    | '"' (~('"' | '.') | '""')+ '"'
+    | '`' (~('`' | '.') | '``')+ '`'
+    ;
+
+fragment NAME_CHAR
+    : 'A'..'Z'
+    | 'a'..'z'
+    | '0'..'9'
+    | '_'
+    | ':'
+    | '@'
+    | '#'
+    | '$'
+    | '{'
+    | '}'
+    | CN_CHAR
+    ;
+
+fragment CN_CHAR
+    : '\u2E80'..'\u9FFF'
+    ;
+```
+
+标志符的使用场景:
+* `TRIGGER`,`FUNCTION`(UDF),`CONTINUOUS QUERY`,`USER`,`ROLE` 等的名字。
+* 时间序列路径的表达:除了时间序列的开头的层级(`root`)和存储组层级外,层级还支持使用被  \`  或者 ` " ` 符号引用的特殊字符串作为其名称。
+
+例子:
+
+```sql
+CREATE FUNCTION "udfname:""actual-name""" AS 
'org.apache.iotdb.db.query.udf.example.Counter'
+# "udfname:""actual-name""" 会被解析成 udfname:"actual-name"
+
+CREATE FUNCTION `udfname:actual-name` AS 
'org.apache.iotdb.db.query.udf.example.Counter'
+# `udfname:actual-name` 会被解析成 udfname:actual-name
+
+CREATE TIMESERIES root.a.b.`s1+s2/s3`.c WITH DATATYPE=INT32,ENCODING=RLE
+# root.a.b.`s1+s2/s3`.c 会被解析成 root.a.b.s1+s2/s3.c
+```
+
 
-https://dev.mysql.com/doc/refman/5.6/en/string-literals.html
 
 ## 单引号(\')
 
+字符串字面值只能由单引号(`'`)字符包围的字符串表示。
+
+字符串字面值(`STRING_LITERAL`)的定义为:
+
+```sql
+STRING_LITERAL
+    : '\'' ((~'\'') | '\'\'')* '\''
+    ;
+```
+
+字符串字面值的使用场景:
+
+* `INSERT` 或者 `SELECT` 中用于表达 `TEXT` 类型数据的场景
+* SQL 中 UDF 和 Trigger 的 Java 类全类名
+* `CREATE TRIGGER` 语句中描述触发器属性的键值对
+* UDF 函数输入参数中的属性
+* `LOAD` / `REMOVE` / `SETTLE` 指令中的文件路径
+* 用户密码
+
+例子:
+
+```sql
+SELECT `my-udf`(s1, s2, 'key'='value') FROM root.sg.d;
+
+CREATE TRIGGER trigger_name BEFORE INSERT ON root.a.b.`s1+s2/s3`.c AS 
'org.apache.iotdb.db.engine.trigger.example.Counter'
+
+CREATE USER `my-%+-*/user&name` 'my-password'
+```
+
+
+
+## 了解更多
+
+请阅读代码仓库中的词法和语法描述文件:
+
+词法文件:`antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlLexer.g4`
+
+语法文件:`antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4`
+

Reply via email to