You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2024/06/24 09:35:57 UTC
(iotdb) 04/04: query process will not invoke setDataPartition method of Analysis
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch beyyes/TableModelGrammar0624
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 259334c83abf3e7f29a6e72e89091085075ff387
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Mon Jun 24 17:35:30 2024 +0800
query process will not invoke setDataPartition method of Analysis
---
.../plan/relational/analyzer/Analysis.java | 19 +++++++++++--------
.../relational/planner/optimizations/IndexScan.java | 13 ++++---------
2 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
index 065260c9899..8bf1b387f28 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/Analysis.java
@@ -167,6 +167,9 @@ public class Analysis implements IAnalysis {
// indicate is there a value filter
private boolean hasValueFilter = false;
+ // if emptyDataSource, there is no need to execute the query in BE
+ private boolean emptyDataSource = false;
+
public DataPartition getDataPartition() {
return dataPartition;
}
@@ -580,6 +583,14 @@ public class Analysis implements IAnalysis {
this.hasValueFilter = hasValueFilter;
}
+ public boolean isEmptyDataSource() {
+ return emptyDataSource;
+ }
+
+ public void setEmptyDataSource(boolean emptyDataSource) {
+ this.emptyDataSource = emptyDataSource;
+ }
+
@Override
public boolean isFailed() {
return false;
@@ -603,14 +614,6 @@ public class Analysis implements IAnalysis {
return finishQueryAfterAnalyze;
}
- private boolean hasDataSource() {
- return (dataPartition != null && !dataPartition.isEmpty());
- // || (schemaPartition != null && !schemaPartition.isEmpty())
- // || statement instanceof ShowQueriesStatement
- // || (statement instanceof QueryStatement
- // && ((QueryStatement) statement).isAggregationQuery());
- }
-
@Override
public TsBlock constructResultForMemorySource(MPPQueryContext context) {
requireNonNull(getStatement(), "root statement is analysis is null");
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java
index a2a0e725d6b..e567b733437 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java
@@ -58,23 +58,17 @@ public class IndexScan implements RelationalPlanOptimizer {
Metadata metadata,
SessionInfo sessionInfo,
MPPQueryContext queryContext) {
- return planNode.accept(new Rewriter(metadata, sessionInfo, analysis, queryContext), null);
+ return planNode.accept(new Rewriter(metadata, analysis, queryContext), null);
}
private static class Rewriter extends PlanVisitor<PlanNode, Void> {
private final Metadata metadata;
- private final SessionInfo sessionInfo;
private final Analysis analysis;
private final MPPQueryContext queryContext;
- Rewriter(
- Metadata metadata,
- SessionInfo sessionInfo,
- Analysis analysis,
- MPPQueryContext queryContext) {
+ Rewriter(Metadata metadata, Analysis analysis, MPPQueryContext queryContext) {
this.metadata = metadata;
- this.sessionInfo = sessionInfo;
this.analysis = analysis;
this.queryContext = queryContext;
}
@@ -105,12 +99,12 @@ public class IndexScan implements RelationalPlanOptimizer {
node.setDeviceEntries(deviceEntries);
if (deviceEntries.isEmpty()) {
analysis.setFinishQueryAfterAnalyze();
+ analysis.setEmptyDataSource(true);
} else {
String treeModelDatabase = "root." + node.getQualifiedObjectName().getDatabaseName();
DataPartition dataPartition =
fetchDataPartitionByDevices(
deviceEntries, treeModelDatabase, queryContext.getGlobalTimeFilter());
- analysis.setDataPartition(dataPartition);
if (dataPartition.getDataPartitionMap().size() > 1) {
throw new IllegalStateException(
@@ -119,6 +113,7 @@ public class IndexScan implements RelationalPlanOptimizer {
if (dataPartition.getDataPartitionMap().isEmpty()) {
analysis.setFinishQueryAfterAnalyze();
+ analysis.setEmptyDataSource(true);
} else {
Set<TRegionReplicaSet> regionReplicaSet = new HashSet<>();
for (Map.Entry<