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