This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch query_plan_visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1aaee411cb82080bad5c4522a906f13cad8dc146 Author: Minghui Liu <[email protected]> AuthorDate: Mon May 30 14:20:18 2022 +0800 add ExplainStatement & implement SQL parser --- .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 7 +++- .../iotdb/db/mpp/plan/parser/ASTVisitor.java | 9 +++++ .../mpp/plan/statement/sys/ExplainStatement.java | 44 ++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 index bc8167772e..9cef992cc8 100644 --- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 +++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 @@ -60,7 +60,7 @@ dclStatement ; utilityStatement - : merge | fullMerge | flush | clearCache | settle + : merge | fullMerge | flush | clearCache | settle | explain | setSystemStatus | showVersion | showFlushInfo | showLockInfo | showQueryResource | showQueryProcesslist | killQuery | grantWatermarkEmbedding | revokeWatermarkEmbedding | loadConfiguration | loadTimeseries | loadFile | removeFile | unloadFile; @@ -622,6 +622,11 @@ settle : SETTLE (prefixPath|tsFilePath=STRING_LITERAL) ; +// Explain +explain + : EXPLAIN selectStatement + ; + // Set System To ReadOnly/Writable setSystemStatus : SET SYSTEM TO (READONLY|WRITABLE) 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 463ff16649..4b0c9a0b42 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 @@ -92,6 +92,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTTLStatement; import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTimeSeriesStatement; import org.apache.iotdb.db.mpp.plan.statement.metadata.UnSetTTLStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.AuthorStatement; +import org.apache.iotdb.db.mpp.plan.statement.sys.ExplainStatement; import org.apache.iotdb.db.qp.constant.SQLConstant; import org.apache.iotdb.db.qp.logical.sys.AuthorOperator; import org.apache.iotdb.db.qp.sql.IoTDBSqlParser; @@ -1762,6 +1763,14 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> { return deleteStorageGroupStatement; } + // Explain ======================================================================== + + @Override + public Statement visitExplain(IoTDBSqlParser.ExplainContext ctx) { + QueryStatement queryStatement = (QueryStatement) visitSelectStatement(ctx.selectStatement()); + return new ExplainStatement(queryStatement); + } + /** function for parsing file path used by LOAD statement. */ public String parseFilePath(String src) { return src.substring(1, src.length() - 1); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/ExplainStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/ExplainStatement.java new file mode 100644 index 0000000000..cf8b06b84b --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/ExplainStatement.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.mpp.plan.statement.sys; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.mpp.plan.statement.Statement; +import org.apache.iotdb.db.mpp.plan.statement.crud.QueryStatement; + +import java.util.List; + +public class ExplainStatement extends Statement { + + private final QueryStatement queryStatement; + + public ExplainStatement(QueryStatement queryStatement) { + this.queryStatement = queryStatement; + } + + public QueryStatement getQueryStatement() { + return queryStatement; + } + + @Override + public List<? extends PartialPath> getPaths() { + return queryStatement.getPaths(); + } +}
