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

jackietien 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 614310aef60 [IOTDB-6314] Treat ExplainAnalyze as a query
614310aef60 is described below

commit 614310aef6019a782759738daa7eef2f37265004
Author: YangCaiyin <[email protected]>
AuthorDate: Wed Mar 20 20:39:26 2024 +0800

    [IOTDB-6314] Treat ExplainAnalyze as a query
---
 .../org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java    | 8 ++++++++
 .../db/queryengine/plan/optimization/ColumnInjectionPushDown.java | 2 +-
 .../db/queryengine/plan/optimization/LimitOffsetPushDown.java     | 2 +-
 .../plan/optimization/OrderByExpressionWithLimitChangeToTopK.java | 2 +-
 .../iotdb/db/queryengine/plan/optimization/PredicatePushDown.java | 2 +-
 .../apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java  | 2 +-
 .../iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java  | 8 ++++----
 .../queryengine/plan/statement/sys/ExplainAnalyzeStatement.java   | 7 +++++++
 8 files changed, 24 insertions(+), 9 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
index 3f109e86e9e..cf73c743b59 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
@@ -50,6 +50,7 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
 import org.apache.iotdb.db.queryengine.plan.statement.component.SortItem;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
+import 
org.apache.iotdb.db.queryengine.plan.statement.sys.ExplainAnalyzeStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement;
 import org.apache.iotdb.db.schemaengine.template.Template;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -329,6 +330,13 @@ public class Analysis implements IAnalysis {
     return dataPartition.getDataRegionReplicaSetWithTimeFilter(deviceName, 
globalTimeFilter);
   }
 
+  public QueryStatement getQueryStatement() {
+    if (statement instanceof ExplainAnalyzeStatement) {
+      return ((ExplainAnalyzeStatement) statement).getQueryStatement();
+    }
+    return (QueryStatement) statement;
+  }
+
   public Statement getStatement() {
     return statement;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/ColumnInjectionPushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/ColumnInjectionPushDown.java
index 60282c8df36..51ade3a465e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/ColumnInjectionPushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/ColumnInjectionPushDown.java
@@ -60,7 +60,7 @@ public class ColumnInjectionPushDown implements PlanOptimizer 
{
     if (analysis.getStatement().getType() != StatementType.QUERY) {
       return plan;
     }
-    QueryStatement queryStatement = (QueryStatement) analysis.getStatement();
+    QueryStatement queryStatement = analysis.getQueryStatement();
     if (queryStatement.isGroupByTime() && queryStatement.isOutputEndTime()) {
       // When the aggregation with GROUP BY TIME isn't rawDataQuery, there are 
AggregationNode and
       // SeriesAggregationNode,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
index 1b9bc0e35da..db4374f17d8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
@@ -70,7 +70,7 @@ public class LimitOffsetPushDown implements PlanOptimizer {
     if (analysis.getStatement().getType() != StatementType.QUERY) {
       return plan;
     }
-    QueryStatement queryStatement = (QueryStatement) analysis.getStatement();
+    QueryStatement queryStatement = analysis.getQueryStatement();
     if (queryStatement.isLastQuery()
         || queryStatement.isAggregationQuery()
         || (!queryStatement.hasLimit() && !queryStatement.hasOffset())) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/OrderByExpressionWithLimitChangeToTopK.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/OrderByExpressionWithLimitChangeToTopK.java
index 9bdf5effc74..b9e35e86167 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/OrderByExpressionWithLimitChangeToTopK.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/OrderByExpressionWithLimitChangeToTopK.java
@@ -65,7 +65,7 @@ public class OrderByExpressionWithLimitChangeToTopK 
implements PlanOptimizer {
       return plan;
     }
 
-    QueryStatement queryStatement = (QueryStatement) analysis.getStatement();
+    QueryStatement queryStatement = analysis.getQueryStatement();
     if (queryStatement.isLastQuery() || !queryStatement.hasLimit()) {
       return plan;
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/PredicatePushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/PredicatePushDown.java
index caf8e8d91e2..2207b94f6b8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/PredicatePushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/PredicatePushDown.java
@@ -65,7 +65,7 @@ public class PredicatePushDown implements PlanOptimizer {
     if (analysis.getStatement().getType() != StatementType.QUERY) {
       return plan;
     }
-    QueryStatement queryStatement = (QueryStatement) analysis.getStatement();
+    QueryStatement queryStatement = analysis.getQueryStatement();
     if (queryStatement.isLastQuery() || !analysis.hasValueFilter()) {
       return plan;
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
index 5c41e242baa..78d939f019f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
@@ -46,7 +46,7 @@ public class LogicalPlanner {
     PlanNode rootNode = new 
LogicalPlanVisitor(analysis).process(analysis.getStatement(), context);
 
     // optimize the query logical plan
-    if (analysis.getStatement().isQuery()) {
+    if (analysis.isQuery()) {
 
       long planFinishTime = System.nanoTime();
       QueryPlanCostMetricSet.getInstance()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
index 17e5b7777b9..608ca14df24 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
@@ -218,6 +218,10 @@ public abstract class PlanVisitor<R, C> {
     return visitSingleChildProcess(node, context);
   }
 
+  public R visitExplainAnalyze(ExplainAnalyzeNode node, C context) {
+    return visitSingleChildProcess(node, context);
+  }
+
   // two child 
-----------------------------------------------------------------------------------
 
   public R visitTwoChildProcess(TwoChildProcessNode node, C context) {
@@ -503,8 +507,4 @@ public abstract class PlanVisitor<R, C> {
   public R visitPipeOperateSchemaQueueNode(PipeOperateSchemaQueueNode node, C 
context) {
     return visitPlan(node, context);
   }
-
-  public R visitExplainAnalyze(ExplainAnalyzeNode node, C context) {
-    return visitPlan(node, context);
-  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
index 0e87e5b5b4d..352ec1c4041 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/ExplainAnalyzeStatement.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.queryengine.plan.statement.sys;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
 
@@ -33,6 +34,7 @@ public class ExplainAnalyzeStatement extends Statement {
   private boolean verbose = false;
 
   public ExplainAnalyzeStatement(QueryStatement queryStatement) {
+    statementType = StatementType.QUERY;
     this.queryStatement = queryStatement;
   }
 
@@ -48,6 +50,11 @@ public class ExplainAnalyzeStatement extends Statement {
     return verbose;
   }
 
+  @Override
+  public boolean isQuery() {
+    return true;
+  }
+
   @Override
   public List<PartialPath> getPaths() {
     return queryStatement.getPaths();

Reply via email to