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

geniuspig pushed a commit to branch fix_antlr
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d0cd5db05da73b87350e469b6b6d615a36ee0077
Author: Boris <[email protected]>
AuthorDate: Mon Oct 5 10:48:45 2020 +0800

    fix antlr which caused benchmark throw exception
---
 .../org/apache/iotdb/db/qp/strategy/SqlBase.g4     | 83 +++++++++++-----------
 .../iotdb/db/qp/strategy/LogicalGenerator.java     | 13 ++--
 2 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 
b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
index 1cee3e8..4e65e05 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
@@ -19,62 +19,60 @@
 
 grammar SqlBase;
 
-@parser::members {public static boolean hasSingleQuoteString;}
-
 singleStatement
     : statement EOF
     ;
 
 statement
-    : {hasSingleQuoteString = false;} CREATE TIMESERIES fullPath alias? WITH 
attributeClauses #createTimeseries
-    | {hasSingleQuoteString = false;} DELETE TIMESERIES prefixPath (COMMA 
prefixPath)* #deleteTimeseries
-    | {hasSingleQuoteString = false;} ALTER TIMESERIES fullPath alterClause 
#alterTimeseries
-    | {hasSingleQuoteString = false;} INSERT INTO prefixPath insertColumnSpec 
VALUES insertValuesSpec #insertStatement
-    | {hasSingleQuoteString = false;} UPDATE prefixPath setClause whereClause? 
#updateStatement
-    | {hasSingleQuoteString = false;} DELETE FROM prefixPath (COMMA 
prefixPath)* (whereClause)? #deleteStatement
-    | {hasSingleQuoteString = false;} SET STORAGE GROUP TO prefixPath 
#setStorageGroup
-    | {hasSingleQuoteString = false;} DELETE STORAGE GROUP prefixPath (COMMA 
prefixPath)* #deleteStorageGroup
+    : CREATE TIMESERIES fullPath alias? WITH attributeClauses #createTimeseries
+    | DELETE TIMESERIES prefixPath (COMMA prefixPath)* #deleteTimeseries
+    | ALTER TIMESERIES fullPath alterClause #alterTimeseries
+    | INSERT INTO prefixPath insertColumnSpec VALUES insertValuesSpec 
#insertStatement
+    | UPDATE prefixPath setClause whereClause? #updateStatement
+    | DELETE FROM prefixPath (COMMA prefixPath)* (whereClause)? 
#deleteStatement
+    | SET STORAGE GROUP TO prefixPath #setStorageGroup
+    | DELETE STORAGE GROUP prefixPath (COMMA prefixPath)* #deleteStorageGroup
     | SHOW METADATA #showMetadata // not support yet
     | DESCRIBE prefixPath #describePath // not support yet
     | CREATE INDEX ON fullPath USING function=ID indexWithClause? whereClause? 
#createIndex //not support yet
     | DROP INDEX function=ID ON fullPath #dropIndex //not support yet
     | MERGE #merge
-    | {hasSingleQuoteString = false;}FLUSH prefixPath? (COMMA prefixPath)* 
(booleanClause)?#flush
+    | FLUSH prefixPath? (COMMA prefixPath)* (booleanClause)?#flush
     | FULL MERGE #fullMerge
     | CLEAR CACHE #clearcache
-    | {hasSingleQuoteString = true;} CREATE USER userName=ID password= 
stringLiteral#createUser
-    | {hasSingleQuoteString = true;} ALTER USER userName=(ROOT|ID) SET 
PASSWORD password=stringLiteral #alterUser
+    | CREATE USER userName=ID password= stringLiteral#createUser
+    | ALTER USER userName=(ROOT|ID) SET PASSWORD password=stringLiteral 
#alterUser
     | DROP USER userName=ID #dropUser
     | CREATE ROLE roleName=ID #createRole
     | DROP ROLE roleName=ID #dropRole
-    | GRANT USER userName=ID PRIVILEGES privileges ON {hasSingleQuoteString = 
false;} prefixPath #grantUser
-    | GRANT ROLE roleName=ID PRIVILEGES privileges ON {hasSingleQuoteString = 
false;} prefixPath #grantRole
-    | REVOKE USER userName=ID PRIVILEGES privileges ON {hasSingleQuoteString = 
false;} prefixPath #revokeUser
-    | REVOKE ROLE roleName=ID PRIVILEGES privileges ON {hasSingleQuoteString = 
false;} prefixPath #revokeRole
+    | GRANT USER userName=ID PRIVILEGES privileges ON prefixPath #grantUser
+    | GRANT ROLE roleName=ID PRIVILEGES privileges ON prefixPath #grantRole
+    | REVOKE USER userName=ID PRIVILEGES privileges ON prefixPath #revokeUser
+    | REVOKE ROLE roleName=ID PRIVILEGES privileges ON prefixPath #revokeRole
     | GRANT roleName=ID TO userName=ID #grantRoleToUser
     | REVOKE roleName = ID FROM userName = ID #revokeRoleFromUser
-    | {hasSingleQuoteString = true;} LOAD TIMESERIES (fileName=stringLiteral) 
prefixPath#loadStatement
+    | LOAD TIMESERIES (fileName=stringLiteral) prefixPath#loadStatement
     | GRANT WATERMARK_EMBEDDING TO rootOrId (COMMA rootOrId)* 
#grantWatermarkEmbedding
     | REVOKE WATERMARK_EMBEDDING FROM rootOrId (COMMA rootOrId)* 
#revokeWatermarkEmbedding
     | LIST USER #listUser
     | LIST ROLE #listRole
-    | LIST PRIVILEGES USER username=rootOrId ON {hasSingleQuoteString = 
false;} prefixPath #listPrivilegesUser
-    | LIST PRIVILEGES ROLE roleName=ID ON {hasSingleQuoteString = false;} 
prefixPath #listPrivilegesRole
+    | LIST PRIVILEGES USER username=rootOrId ON prefixPath #listPrivilegesUser
+    | LIST PRIVILEGES ROLE roleName=ID ON prefixPath #listPrivilegesRole
     | LIST USER PRIVILEGES username =rootOrId #listUserPrivileges
     | LIST ROLE PRIVILEGES roleName = ID #listRolePrivileges
     | LIST ALL ROLE OF USER username = rootOrId #listAllRoleOfUser
     | LIST ALL USER OF ROLE roleName = ID #listAllUserOfRole
-    | {hasSingleQuoteString = false;} SET TTL TO path=prefixPath time=INT 
#setTTLStatement
-    | {hasSingleQuoteString = false;} UNSET TTL TO path=prefixPath 
#unsetTTLStatement
-    | {hasSingleQuoteString = false;} SHOW TTL ON prefixPath (COMMA 
prefixPath)* #showTTLStatement
+    | SET TTL TO path=prefixPath time=INT #setTTLStatement
+    | UNSET TTL TO path=prefixPath #unsetTTLStatement
+    | SHOW TTL ON prefixPath (COMMA prefixPath)* #showTTLStatement
     | SHOW ALL TTL #showAllTTLStatement
     | SHOW FLUSH TASK INFO #showFlushTaskInfo
     | SHOW DYNAMIC PARAMETER #showDynamicParameter
     | SHOW VERSION #showVersion
-    | {hasSingleQuoteString = false;} SHOW LATEST? TIMESERIES prefixPath? 
showWhereClause? limitClause? #showTimeseries
-    | {hasSingleQuoteString = false;} SHOW STORAGE GROUP prefixPath? 
#showStorageGroup
-    | {hasSingleQuoteString = false;} SHOW CHILD PATHS prefixPath? 
#showChildPaths
-    | {hasSingleQuoteString = false;} SHOW DEVICES prefixPath? #showDevices
+    | SHOW LATEST? TIMESERIES prefixPath? showWhereClause? limitClause? 
#showTimeseries
+    | SHOW STORAGE GROUP prefixPath? #showStorageGroup
+    | SHOW CHILD PATHS prefixPath? #showChildPaths
+    | SHOW DEVICES prefixPath? #showDevices
     | SHOW MERGE #showMergeStatus
     | TRACING ON #tracingOn
     | TRACING OFF #tracingOff
@@ -83,10 +81,10 @@ statement
     | COUNT STORAGE GROUP prefixPath? #countStorageGroup
     | COUNT NODES prefixPath LEVEL OPERATOR_EQ INT #countNodes
     | LOAD CONFIGURATION (MINUS GLOBAL)? #loadConfigurationStatement
-    | {hasSingleQuoteString = true;} LOAD stringLiteral 
autoCreateSchema?#loadFiles
-    | {hasSingleQuoteString = true;} REMOVE stringLiteral #removeFile
-    | {hasSingleQuoteString = true;} MOVE stringLiteral stringLiteral #moveFile
-    | {hasSingleQuoteString = false;} DELETE PARTITION prefixPath INT(COMMA 
INT)* #deletePartition
+    | LOAD stringLiteral autoCreateSchema?#loadFiles
+    | REMOVE stringLiteral #removeFile
+    | MOVE stringLiteral stringLiteral #moveFile
+    | DELETE PARTITION prefixPath INT(COMMA INT)* #deletePartition
     | CREATE SNAPSHOT FOR SCHEMA #createSnapshot
     | SELECT INDEX func=ID //not support yet
     LR_BRACKET
@@ -96,7 +94,7 @@ statement
     fromClause
     whereClause?
     specialClause? #selectIndexStatement
-    | {hasSingleQuoteString = true;} SELECT selectElements
+    | SELECT selectElements
     fromClause
     whereClause?
     specialClause? #selectStatement
@@ -104,12 +102,17 @@ statement
 
 selectElements
     : functionCall (COMMA functionCall)* #functionElement
-    | suffixPath (COMMA suffixPath)* #selectElement
+    | suffixPathOrConstant (COMMA suffixPathOrConstant)* #selectElement
     | lastClause #lastElement
     | asClause (COMMA asClause)* #asElement
     | functionAsClause (COMMA functionAsClause)* #functionAsElement
     ;
 
+suffixPathOrConstant
+    : suffixPath
+    | SINGLE_QUOTE_STRING_LITERAL
+    ;
+
 functionCall
     : functionName LR_BRACKET suffixPath RR_BRACKET
     ;
@@ -216,7 +219,7 @@ inClause
     ;
 
 fromClause
-    : {hasSingleQuoteString = false;} FROM prefixPath (COMMA prefixPath)*
+    : FROM prefixPath (COMMA prefixPath)*
     ;
 
 specialClause
@@ -352,7 +355,7 @@ setCol
     ;
 
 privileges
-    : {hasSingleQuoteString = true;} stringLiteral (COMMA stringLiteral)*
+    : stringLiteral (COMMA stringLiteral)*
     ;
 
 rootOrId
@@ -374,7 +377,7 @@ timeValue
 propertyValue
     : INT
     | ID
-    | {hasSingleQuoteString = true;} stringLiteral
+    | stringLiteral
     | constant
     ;
 
@@ -393,7 +396,7 @@ suffixPath
 nodeName
     : ID
     | STAR
-    | stringLiteral
+    | DOUBLE_QUOTE_STRING_LITERAL
     | ID STAR
     | DURATION
     | encoding
@@ -504,7 +507,7 @@ nodeName
 
 nodeNameWithoutStar
     : ID
-    | stringLiteral
+    | DOUBLE_QUOTE_STRING_LITERAL
     | DURATION
     | encoding
     | dataType
@@ -626,7 +629,7 @@ constant
     | NaN
     | MINUS? realLiteral
     | MINUS? INT
-    | {hasSingleQuoteString = true;} stringLiteral
+    | stringLiteral
     | booleanClause
     ;
 
@@ -1241,7 +1244,7 @@ UNDERLINE : '_';
 NaN : 'NaN';
 
 stringLiteral
-   : {hasSingleQuoteString}? SINGLE_QUOTE_STRING_LITERAL
+   : SINGLE_QUOTE_STRING_LITERAL
    | DOUBLE_QUOTE_STRING_LITERAL
    ;
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java 
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index 213cb65..9915d7e 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -1297,10 +1297,15 @@ public class LogicalGenerator extends 
SqlBaseBaseListener {
   public void enterSelectElement(SelectElementContext ctx) {
     super.enterSelectElement(ctx);
     selectOp = new SelectOperator(SQLConstant.TOK_SELECT);
-    List<SuffixPathContext> suffixPaths = ctx.suffixPath();
-    for (SuffixPathContext suffixPath : suffixPaths) {
-      PartialPath path = parseSuffixPath(suffixPath);
-      selectOp.addSelectPath(path);
+    List<SqlBaseParser.SuffixPathOrConstantContext> suffixPathOrConstants = 
ctx.suffixPathOrConstant();
+    for (SqlBaseParser.SuffixPathOrConstantContext suffixPathOrConstant : 
suffixPathOrConstants) {
+      if(suffixPathOrConstant.suffixPath() != null){
+        PartialPath path = parseSuffixPath(suffixPathOrConstant.suffixPath());
+        selectOp.addSelectPath(path);
+      } else {
+        PartialPath path = new PartialPath(new 
String[]{suffixPathOrConstant.SINGLE_QUOTE_STRING_LITERAL().getText()});
+        selectOp.addSelectPath(path);
+      }
     }
     queryOp.setSelectOperator(selectOp);
   }

Reply via email to