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

Reply via email to