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

Reply via email to