This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 79ea9c36eb [IOTDB-5548] Fix typo in ASTVisitor.createSchemaTemplate
and ASTvisitor.parseIdentifier (#9086)
79ea9c36eb is described below
commit 79ea9c36eb2127a130bd44aef9ee01cc21366a50
Author: Liao Lanyu <[email protected]>
AuthorDate: Mon Feb 20 14:07:09 2023 +0800
[IOTDB-5548] Fix typo in ASTVisitor.createSchemaTemplate and
ASTvisitor.parseIdentifier (#9086)
---
.../apache/iotdb/db/mpp/plan/parser/ASTVisitor.java | 8 ++++----
.../db/service/thrift/impl/ClientRPCServiceImpl.java | 18 ++++++++++++++++--
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index c9aee02cc4..1d5456683d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -1644,8 +1644,8 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
}
}
- private void checkIdentifier(String src) {
- if (!TsFileConstant.IDENTIFIER_PATTERN.matcher(src).matches()) {
+ private static void checkIdentifier(String src) {
+ if (!TsFileConstant.IDENTIFIER_PATTERN.matcher(src).matches() ||
PathUtils.isRealNumber(src)) {
throw new SemanticException(
String.format(
"%s is illegal, identifier not enclosed with backticks can only
consist of digits, characters and underscore.",
@@ -1721,7 +1721,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
return src;
}
- private String parseIdentifier(String src) {
+ public static String parseIdentifier(String src) {
if (src.startsWith(TsFileConstant.BACK_QUOTE_STRING)
&& src.endsWith(TsFileConstant.BACK_QUOTE_STRING)) {
return src.substring(1, src.length() - 1)
@@ -2764,7 +2764,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
@Override
public Statement
visitCreateSchemaTemplate(IoTDBSqlParser.CreateSchemaTemplateContext ctx) {
- String name = parseIdentifier(parseIdentifier(ctx.templateName.getText()));
+ String name = parseIdentifier(ctx.templateName.getText());
List<List<String>> measurementsList = new ArrayList<>();
List<List<TSDataType>> dataTypesList = new ArrayList<>();
List<List<TSEncoding>> encodingsList = new ArrayList<>();
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
index 4b24010592..b08c7c9e26 100644
---
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
+++
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/ClientRPCServiceImpl.java
@@ -41,6 +41,7 @@ import
org.apache.iotdb.db.mpp.plan.analyze.schema.ClusterSchemaFetcher;
import org.apache.iotdb.db.mpp.plan.analyze.schema.ISchemaFetcher;
import org.apache.iotdb.db.mpp.plan.execution.ExecutionResult;
import org.apache.iotdb.db.mpp.plan.execution.IQueryExecution;
+import org.apache.iotdb.db.mpp.plan.parser.ASTVisitor;
import org.apache.iotdb.db.mpp.plan.parser.StatementGenerator;
import org.apache.iotdb.db.mpp.plan.statement.Statement;
import org.apache.iotdb.db.mpp.plan.statement.StatementType;
@@ -1528,7 +1529,7 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return getNotLoggedInStatus();
}
- req.setName(PathUtils.checkAndReturnSingleMeasurement(req.getName()));
+
req.setName(checkIdentifierAndRemoveBackQuotesIfNecessary(req.getName()));
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
CreateSchemaTemplateStatement statement =
StatementGenerator.createStatement(req);
@@ -1584,6 +1585,11 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return resp;
}
+ // "" and * have special meaning in implementation. Currently, we do not
deal with them.
+ if (!req.getName().equals("") && !req.getName().equals("*")) {
+
req.setName(checkIdentifierAndRemoveBackQuotesIfNecessary(req.getName()));
+ }
+
Statement statement = StatementGenerator.createStatement(req);
if (statement == null) {
resp.setStatus(
@@ -1690,7 +1696,7 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return getNotLoggedInStatus();
}
-
req.setTemplateName(PathUtils.checkAndReturnSingleMeasurement(req.getTemplateName()));
+
req.setTemplateName(checkIdentifierAndRemoveBackQuotesIfNecessary(req.getTemplateName()));
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
SetSchemaTemplateStatement statement =
StatementGenerator.createStatement(req);
@@ -1735,6 +1741,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return getNotLoggedInStatus();
}
+
req.setTemplateName(checkIdentifierAndRemoveBackQuotesIfNecessary(req.getTemplateName()));
+
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
UnsetSchemaTemplateStatement statement =
StatementGenerator.createStatement(req);
@@ -1779,6 +1787,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return getNotLoggedInStatus();
}
+
req.setTemplateName(checkIdentifierAndRemoveBackQuotesIfNecessary(req.getTemplateName()));
+
// Step 1: transfer from TSCreateSchemaTemplateReq to Statement
DropSchemaTemplateStatement statement =
StatementGenerator.createStatement(req);
@@ -1933,6 +1943,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
statementType.name());
}
+ private String checkIdentifierAndRemoveBackQuotesIfNecessary(String
identifier) {
+ return identifier == null ? null : ASTVisitor.parseIdentifier(identifier);
+ }
+
@Override
public void handleClientExit() {
IClientSession session = SESSION_MANAGER.getCurrSession();