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