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 <[email protected]> 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<
