This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch TableModelIngestion
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/TableModelIngestion by this
push:
new 13517590d5e finish analyze
13517590d5e is described below
commit 13517590d5e556692dbabe0ccf8a277b1479fba4
Author: jt2594838 <[email protected]>
AuthorDate: Tue Jun 11 19:34:12 2024 +0800
finish analyze
---
.../db/queryengine/plan/analyze/Analysis.java | 6 +-
.../db/queryengine/plan/analyze/AnalyzeUtils.java | 61 +++++++--
.../queryengine/plan/analyze/AnalyzeVisitor.java | 150 +++++++++------------
.../db/queryengine/plan/analyze/IAnalysis.java | 15 +++
.../plan/analyze/LoadTsfileAnalyzer.java | 2 +-
.../memory/StatementMemorySourceVisitor.java | 2 +-
.../plan/optimization/AggregationPushDown.java | 2 +-
.../plan/optimization/ColumnInjectionPushDown.java | 2 +-
.../plan/optimization/LimitOffsetPushDown.java | 2 +-
.../OrderByExpressionWithLimitChangeToTopK.java | 2 +-
.../plan/optimization/PredicatePushDown.java | 2 +-
.../queryengine/plan/planner/LogicalPlanner.java | 2 +-
.../queryengine/plan/planner/TreeModelPlanner.java | 6 +-
.../planner/distribution/DistributionPlanner.java | 10 +-
.../SimpleFragmentParallelPlanner.java | 14 +-
.../planner/plan/node/load/LoadTsFileNode.java | 6 +-
.../plan/relational/analyzer/Analysis.java | 2 +-
.../relational/analyzer/StatementAnalyzer.java | 36 +----
.../plan/relational/metadata/Metadata.java | 15 +++
.../plan/relational/planner/LogicalPlanner.java | 2 +-
.../distribute/FragmentInstanceGenerator.java | 2 +-
.../distribute/TableDistributionPlanner.java | 2 +-
.../db/queryengine/plan/analyze/AnalyzeTest.java | 2 +-
.../plan/optimization/OptimizationTestUtil.java | 4 +-
.../plan/planner/distribution/Util.java | 4 +-
.../plan/planner/distribution/Util2.java | 4 +-
.../planner/logical/LogicalPlannerTestUtil.java | 2 +-
27 files changed, 189 insertions(+), 170 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 cb383edd45b..23caac86c1d 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
@@ -370,11 +370,11 @@ public class Analysis implements IAnalysis {
return (QueryStatement) statement;
}
- public Statement getStatement() {
+ public Statement getTreeStatement() {
return statement;
}
- public void setStatement(Statement statement) {
+ public void setTreeStatement(Statement statement) {
this.statement = statement;
}
@@ -469,7 +469,7 @@ public class Analysis implements IAnalysis {
public TsBlock constructResultForMemorySource(MPPQueryContext context) {
StatementMemorySource memorySource =
new StatementMemorySourceVisitor()
- .process(getStatement(), new StatementMemorySourceContext(context,
this));
+ .process(getTreeStatement(), new
StatementMemorySourceContext(context, this));
setRespDatasetHeader(memorySource.getDatasetHeader());
return memorySource.getTsBlock();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
index af861730016..df3a795f1b1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
@@ -33,7 +33,6 @@ import
org.apache.iotdb.commons.partition.DataPartitionQueryParam;
import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
import
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
@@ -54,6 +53,41 @@ public class AnalyzeUtils {
// util class
}
+ public static IAnalysis analyzeInsert(MPPQueryContext context,
+ InsertBaseStatement insertBaseStatement, Runnable schemaValidation,
+ DataPartitionQueryFunc partitionFetcher) {
+ context.setQueryType(QueryType.WRITE);
+ insertBaseStatement.semanticCheck();
+ IAnalysis analysis = new
org.apache.iotdb.db.queryengine.plan.analyze.Analysis();
+ validateSchema(analysis, insertBaseStatement,
+ schemaValidation);
+ InsertBaseStatement realStatement = removeLogicalView(analysis,
insertBaseStatement);
+ if (analysis.isFinishQueryAfterAnalyze()) {
+ return analysis;
+ }
+ analysis.setTreeStatement(realStatement);
+
+ if (realStatement instanceof InsertTabletStatement) {
+ InsertTabletStatement realInsertTabletStatement =
(InsertTabletStatement) realStatement;
+ DataPartitionQueryParam dataPartitionQueryParam = new
DataPartitionQueryParam();
+ dataPartitionQueryParam.setDevicePath(
+ realInsertTabletStatement.getDevicePath().getFullPath());
+ dataPartitionQueryParam.setTimePartitionSlotList(
+ realInsertTabletStatement.getTimePartitionSlots());
+
+ analysis = getAnalysisForWriting(
+ analysis,
+ Collections.singletonList(dataPartitionQueryParam),
+ context.getSession().getUserName(), partitionFetcher);
+ } else {
+ analysis = computeAnalysisForMultiTablets(
+ analysis,
+ (InsertMultiTabletsStatement) realStatement,
+ context.getSession().getUserName(), partitionFetcher);
+ }
+ return analysis;
+ }
+
public static void validateSchema(
IAnalysis analysis, InsertBaseStatement insertStatement,
Runnable schemaValidation) {
@@ -103,12 +137,12 @@ public class AnalyzeUtils {
}
/** get analysis according to statement and params */
- public static Analysis getAnalysisForWriting(
- Analysis analysis, List<DataPartitionQueryParam>
dataPartitionQueryParams, String userName,
- IPartitionFetcher partitionFetcher) {
+ public static IAnalysis getAnalysisForWriting(
+ IAnalysis analysis, List<DataPartitionQueryParam>
dataPartitionQueryParams, String userName,
+ DataPartitionQueryFunc partitionQueryFunc) {
DataPartition dataPartition =
- partitionFetcher.getOrCreateDataPartition(dataPartitionQueryParams,
userName);
+ partitionQueryFunc.queryDataPartition(dataPartitionQueryParams,
userName);
if (dataPartition.isEmpty()) {
analysis.setFinishQueryAfterAnalyze(true);
analysis.setFailStatus(
@@ -121,9 +155,9 @@ public class AnalyzeUtils {
return analysis;
}
- public static Analysis computeAnalysisForInsertRows(
- Analysis analysis, InsertRowsStatement insertRowsStatement, String
userName,
- IPartitionFetcher partitionFetcher) {
+ public static IAnalysis computeAnalysisForInsertRows(
+ IAnalysis analysis, InsertRowsStatement insertRowsStatement, String
userName,
+ DataPartitionQueryFunc partitionFetcher) {
Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new
HashMap<>();
for (InsertRowStatement insertRowStatement :
insertRowsStatement.getInsertRowStatementList()) {
Set<TTimePartitionSlot> timePartitionSlotSet =
@@ -143,9 +177,9 @@ public class AnalyzeUtils {
return getAnalysisForWriting(analysis, dataPartitionQueryParams, userName,
partitionFetcher);
}
- public static Analysis computeAnalysisForMultiTablets(
- Analysis analysis, InsertMultiTabletsStatement
insertMultiTabletsStatement, String userName
- , IPartitionFetcher partitionFetcher) {
+ public static IAnalysis computeAnalysisForMultiTablets(
+ IAnalysis analysis, InsertMultiTabletsStatement
insertMultiTabletsStatement, String userName
+ , DataPartitionQueryFunc partitionFetcher) {
Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new
HashMap<>();
for (InsertTabletStatement insertTabletStatement :
insertMultiTabletsStatement.getInsertTabletStatementList()) {
@@ -165,4 +199,9 @@ public class AnalyzeUtils {
return getAnalysisForWriting(analysis, dataPartitionQueryParams, userName,
partitionFetcher);
}
+
+ public interface DataPartitionQueryFunc {
+ DataPartition queryDataPartition(List<DataPartitionQueryParam>
dataPartitionQueryParams,
+ String userName);
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index af95e958a8c..b63ea6ddc1e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -206,7 +206,7 @@ import static
org.apache.iotdb.db.schemaengine.schemaregion.view.visitor.GetSour
import static org.apache.iotdb.db.utils.constant.SqlConstant.COUNT_TIME_HEADER;
/** This visitor is used to analyze each type of Statement and returns the
{@link Analysis}. */
-public class AnalyzeVisitor extends StatementVisitor<Analysis,
MPPQueryContext> {
+public class AnalyzeVisitor extends StatementVisitor<IAnalysis,
MPPQueryContext> {
private static final Logger logger =
LoggerFactory.getLogger(AnalyzeVisitor.class);
@@ -241,7 +241,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
@Override
public Analysis visitExplain(ExplainStatement explainStatement,
MPPQueryContext context) {
Analysis analysis = visitQuery(explainStatement.getQueryStatement(),
context);
- analysis.setStatement(explainStatement);
+ analysis.setTreeStatement(explainStatement);
analysis.setFinishQueryAfterAnalyze(true);
return analysis;
}
@@ -251,7 +251,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
ExplainAnalyzeStatement explainAnalyzeStatement, MPPQueryContext
context) {
Analysis analysis =
visitQuery(explainAnalyzeStatement.getQueryStatement(), context);
context.setExplainAnalyze(true);
- analysis.setStatement(explainAnalyzeStatement);
+ analysis.setTreeStatement(explainAnalyzeStatement);
analysis.setRespDatasetHeader(
new DatasetHeader(
Collections.singletonList(
@@ -406,7 +406,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
(QueryStatement)
concatPathRewriter.rewrite(
queryStatement, new
PathPatternTree(queryStatement.useWildcard()), context);
- analysis.setStatement(queryStatement);
+ analysis.setTreeStatement(queryStatement);
// request schema fetch API
long startTime = System.nanoTime();
@@ -578,8 +578,8 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
analysis.setUseLogicalView(useLogicalView);
if (useLogicalView
- && analysis.getStatement() instanceof QueryStatement
- && (((QueryStatement) analysis.getStatement()).isGroupByTag())) {
+ && analysis.getTreeStatement() instanceof QueryStatement
+ && (((QueryStatement) analysis.getTreeStatement()).isGroupByTag())) {
throw new SemanticException("Views cannot be used in GROUP BY TAGS query
yet.");
}
@@ -2277,7 +2277,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
@Override
- public Analysis visitInsert(InsertStatement insertStatement, MPPQueryContext
context) {
+ public IAnalysis visitInsert(InsertStatement insertStatement,
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
long[] timeArray = insertStatement.getTimes();
PartialPath devicePath = insertStatement.getDevice();
@@ -2362,7 +2362,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
Analysis analysis = new Analysis();
- analysis.setStatement(createTimeSeriesStatement);
+ analysis.setTreeStatement(createTimeSeriesStatement);
checkIsTableCompatible(createTimeSeriesStatement.getPath(), context);
checkIsTemplateCompatible(
@@ -2474,7 +2474,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
Analysis analysis = new Analysis();
- analysis.setStatement(createAlignedTimeSeriesStatement);
+ analysis.setTreeStatement(createAlignedTimeSeriesStatement);
checkIsTableCompatible(createAlignedTimeSeriesStatement.getDevicePath(),
context);
checkIsTemplateCompatible(
@@ -2504,7 +2504,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(internalCreateTimeSeriesStatement);
+ analysis.setTreeStatement(internalCreateTimeSeriesStatement);
checkIsTableCompatible(internalCreateTimeSeriesStatement.getDevicePath(),
context);
checkIsTemplateCompatible(
internalCreateTimeSeriesStatement.getDevicePath(),
@@ -2534,7 +2534,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(internalCreateMultiTimeSeriesStatement);
+ analysis.setTreeStatement(internalCreateMultiTimeSeriesStatement);
PathPatternTree pathPatternTree = new PathPatternTree();
DataNodeSchemaLockManager.getInstance().takeReadLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
@@ -2560,7 +2560,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement,
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(createMultiTimeSeriesStatement);
+ analysis.setTreeStatement(createMultiTimeSeriesStatement);
analyzeSchemaProps(createMultiTimeSeriesStatement.getPropsList());
@@ -2591,7 +2591,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
AlterTimeSeriesStatement alterTimeSeriesStatement, MPPQueryContext
context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(alterTimeSeriesStatement);
+ analysis.setTreeStatement(alterTimeSeriesStatement);
Pair<Template, PartialPath> templateInfo =
schemaFetcher.checkTemplateSetAndPreSetInfo(
@@ -2615,41 +2615,15 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
@Override
- public Analysis visitInsertTablet(
+ public IAnalysis visitInsertTablet(
InsertTabletStatement insertTabletStatement, MPPQueryContext context) {
- context.setQueryType(QueryType.WRITE);
- insertTabletStatement.semanticCheck();
- Analysis analysis = new Analysis();
- validateSchema(analysis, insertTabletStatement,
- () -> SchemaValidator.validate(schemaFetcher, insertTabletStatement,
context));
- InsertBaseStatement realStatement = removeLogicalView(analysis,
insertTabletStatement);
- if (analysis.isFinishQueryAfterAnalyze()) {
- return analysis;
- }
- analysis.setStatement(realStatement);
-
- if (realStatement instanceof InsertTabletStatement) {
- InsertTabletStatement realInsertTabletStatement =
(InsertTabletStatement) realStatement;
- DataPartitionQueryParam dataPartitionQueryParam = new
DataPartitionQueryParam();
- dataPartitionQueryParam.setDevicePath(
- realInsertTabletStatement.getDevicePath().getFullPath());
- dataPartitionQueryParam.setTimePartitionSlotList(
- realInsertTabletStatement.getTimePartitionSlots());
-
- return getAnalysisForWriting(
- analysis,
- Collections.singletonList(dataPartitionQueryParam),
- context.getSession().getUserName(), partitionFetcher);
- } else {
- return computeAnalysisForMultiTablets(
- analysis,
- (InsertMultiTabletsStatement) realStatement,
- context.getSession().getUserName(), partitionFetcher);
- }
+ return AnalyzeUtils.analyzeInsert(context, insertTabletStatement,
+ () -> SchemaValidator.validate(schemaFetcher, insertTabletStatement,
context),
+ partitionFetcher::getOrCreateDataPartition);
}
@Override
- public Analysis visitInsertRow(InsertRowStatement insertRowStatement,
MPPQueryContext context) {
+ public IAnalysis visitInsertRow(InsertRowStatement insertRowStatement,
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
insertRowStatement.semanticCheck();
Analysis analysis = new Analysis();
@@ -2659,7 +2633,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (analysis.isFinishQueryAfterAnalyze()) {
return analysis;
}
- analysis.setStatement(realInsertStatement);
+ analysis.setTreeStatement(realInsertStatement);
if (realInsertStatement instanceof InsertRowStatement) {
InsertRowStatement realInsertRowStatement = (InsertRowStatement)
realInsertStatement;
@@ -2671,16 +2645,16 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
return getAnalysisForWriting(
analysis,
Collections.singletonList(dataPartitionQueryParam),
- context.getSession().getUserName(), partitionFetcher);
+ context.getSession().getUserName(),
partitionFetcher::getOrCreateDataPartition);
} else {
return computeAnalysisForInsertRows(
analysis, (InsertRowsStatement) realInsertStatement,
context.getSession().getUserName()
- , partitionFetcher);
+ , partitionFetcher::getOrCreateDataPartition);
}
}
@Override
- public Analysis visitInsertRows(
+ public IAnalysis visitInsertRows(
InsertRowsStatement insertRowsStatement, MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
insertRowsStatement.semanticCheck();
@@ -2692,14 +2666,14 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (analysis.isFinishQueryAfterAnalyze()) {
return analysis;
}
- analysis.setStatement(realInsertRowsStatement);
+ analysis.setTreeStatement(realInsertRowsStatement);
return computeAnalysisForInsertRows(
- analysis, realInsertRowsStatement, context.getSession().getUserName(),
partitionFetcher);
+ analysis, realInsertRowsStatement, context.getSession().getUserName(),
partitionFetcher::getOrCreateDataPartition);
}
@Override
- public Analysis visitInsertMultiTablets(
+ public IAnalysis visitInsertMultiTablets(
InsertMultiTabletsStatement insertMultiTabletsStatement, MPPQueryContext
context) {
context.setQueryType(QueryType.WRITE);
insertMultiTabletsStatement.semanticCheck();
@@ -2711,14 +2685,14 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (analysis.isFinishQueryAfterAnalyze()) {
return analysis;
}
- analysis.setStatement(realStatement);
+ analysis.setTreeStatement(realStatement);
return computeAnalysisForMultiTablets(
- analysis, realStatement, context.getSession().getUserName(),
partitionFetcher);
+ analysis, realStatement, context.getSession().getUserName(),
partitionFetcher::getOrCreateDataPartition);
}
@Override
- public Analysis visitInsertRowsOfOneDevice(
+ public IAnalysis visitInsertRowsOfOneDevice(
InsertRowsOfOneDeviceStatement insertRowsOfOneDeviceStatement,
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
insertRowsOfOneDeviceStatement.semanticCheck();
@@ -2730,7 +2704,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (analysis.isFinishQueryAfterAnalyze()) {
return analysis;
}
- analysis.setStatement(realInsertStatement);
+ analysis.setTreeStatement(realInsertStatement);
if (realInsertStatement instanceof InsertRowsOfOneDeviceStatement) {
InsertRowsOfOneDeviceStatement realStatement =
@@ -2743,22 +2717,22 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
analysis,
Collections.singletonList(dataPartitionQueryParam),
context.getSession().getUserName(),
- partitionFetcher);
+ partitionFetcher::getOrCreateDataPartition);
} else {
return computeAnalysisForInsertRows(
analysis, (InsertRowsStatement) realInsertStatement,
context.getSession().getUserName()
- , partitionFetcher);
+ , partitionFetcher::getOrCreateDataPartition);
}
}
@Override
- public Analysis visitPipeEnrichedStatement(
+ public IAnalysis visitPipeEnrichedStatement(
PipeEnrichedStatement pipeEnrichedStatement, MPPQueryContext context) {
- Analysis analysis = pipeEnrichedStatement.getInnerStatement().accept(this,
context);
+ IAnalysis analysis =
pipeEnrichedStatement.getInnerStatement().accept(this, context);
// statement may be changed because of logical view
- pipeEnrichedStatement.setInnerStatement(analysis.getStatement());
- analysis.setStatement(pipeEnrichedStatement);
+ pipeEnrichedStatement.setInnerStatement(analysis.getTreeStatement());
+ analysis.setTreeStatement(pipeEnrichedStatement);
return analysis;
}
@@ -2837,7 +2811,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowTimeSeries(
ShowTimeSeriesStatement showTimeSeriesStatement, MPPQueryContext
context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showTimeSeriesStatement);
+ analysis.setTreeStatement(showTimeSeriesStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(showTimeSeriesStatement.getPathPattern());
@@ -2890,7 +2864,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowStorageGroup(
ShowDatabaseStatement showDatabaseStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showDatabaseStatement);
+ analysis.setTreeStatement(showDatabaseStatement);
analysis.setRespDatasetHeader(
DatasetHeaderFactory.getShowStorageGroupHeader(showDatabaseStatement.isDetailed()));
return analysis;
@@ -2899,7 +2873,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
@Override
public Analysis visitShowTTL(ShowTTLStatement showTTLStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showTTLStatement);
+ analysis.setTreeStatement(showTTLStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowTTLHeader());
return analysis;
}
@@ -2965,7 +2939,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowDevices(
ShowDevicesStatement showDevicesStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showDevicesStatement);
+ analysis.setTreeStatement(showDevicesStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(
@@ -2989,7 +2963,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowCluster(
ShowClusterStatement showClusterStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showClusterStatement);
+ analysis.setTreeStatement(showClusterStatement);
if (showClusterStatement.isDetails()) {
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowClusterDetailsHeader());
} else {
@@ -3002,7 +2976,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitCountStorageGroup(
CountDatabaseStatement countDatabaseStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(countDatabaseStatement);
+ analysis.setTreeStatement(countDatabaseStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getCountStorageGroupHeader());
return analysis;
}
@@ -3011,7 +2985,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitSchemaFetch(
SchemaFetchStatement schemaFetchStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(schemaFetchStatement);
+ analysis.setTreeStatement(schemaFetchStatement);
SchemaPartition schemaPartition =
partitionFetcher.getSchemaPartition(schemaFetchStatement.getPatternTree());
@@ -3028,7 +3002,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitCountDevices(
CountDevicesStatement countDevicesStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(countDevicesStatement);
+ analysis.setTreeStatement(countDevicesStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(
@@ -3049,7 +3023,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitCountTimeSeries(
CountTimeSeriesStatement countTimeSeriesStatement, MPPQueryContext
context) {
Analysis analysis = new Analysis();
- analysis.setStatement(countTimeSeriesStatement);
+ analysis.setTreeStatement(countTimeSeriesStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(countTimeSeriesStatement.getPathPattern());
@@ -3081,7 +3055,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitCountLevelTimeSeries(
CountLevelTimeSeriesStatement countLevelTimeSeriesStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(countLevelTimeSeriesStatement);
+ analysis.setTreeStatement(countLevelTimeSeriesStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(countLevelTimeSeriesStatement.getPathPattern());
@@ -3098,7 +3072,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
@Override
public Analysis visitCountNodes(CountNodesStatement countStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(countStatement);
+ analysis.setTreeStatement(countStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(countStatement.getPathPattern());
@@ -3143,7 +3117,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowVersion(
ShowVersionStatement showVersionStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showVersionStatement);
+ analysis.setTreeStatement(showVersionStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowVersionHeader());
analysis.setFinishQueryAfterAnalyze(true);
return analysis;
@@ -3152,7 +3126,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
private Analysis visitSchemaNodeManagementPartition(
Statement statement, PartialPath path, PathPatternTree scope,
DatasetHeader header) {
Analysis analysis = new Analysis();
- analysis.setStatement(statement);
+ analysis.setTreeStatement(statement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(path);
@@ -3177,7 +3151,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
DeleteDataStatement deleteDataStatement, MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(deleteDataStatement);
+ analysis.setTreeStatement(deleteDataStatement);
PathPatternTree patternTree = new PathPatternTree();
deleteDataStatement.getPathList().forEach(patternTree::appendPathPattern);
@@ -3249,7 +3223,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
"Measurement under template is not allowed to have the same
measurement name");
}
Analysis analysis = new Analysis();
- analysis.setStatement(createTemplateStatement);
+ analysis.setTreeStatement(createTemplateStatement);
return analysis;
}
@@ -3258,7 +3232,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
ShowNodesInSchemaTemplateStatement showNodesInSchemaTemplateStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showNodesInSchemaTemplateStatement);
+ analysis.setTreeStatement(showNodesInSchemaTemplateStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowNodesInSchemaTemplateHeader());
return analysis;
}
@@ -3267,7 +3241,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowSchemaTemplate(
ShowSchemaTemplateStatement showSchemaTemplateStatement, MPPQueryContext
context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showSchemaTemplateStatement);
+ analysis.setTreeStatement(showSchemaTemplateStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowSchemaTemplateHeader());
return analysis;
}
@@ -3277,7 +3251,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
SetSchemaTemplateStatement setSchemaTemplateStatement, MPPQueryContext
context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(setSchemaTemplateStatement);
+ analysis.setTreeStatement(setSchemaTemplateStatement);
return analysis;
}
@@ -3285,7 +3259,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowPathSetTemplate(
ShowPathSetTemplateStatement showPathSetTemplateStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showPathSetTemplateStatement);
+ analysis.setTreeStatement(showPathSetTemplateStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowPathSetTemplateHeader());
return analysis;
}
@@ -3295,7 +3269,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
ActivateTemplateStatement activateTemplateStatement, MPPQueryContext
context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(activateTemplateStatement);
+ analysis.setTreeStatement(activateTemplateStatement);
PartialPath activatePath = activateTemplateStatement.getPath();
@@ -3325,7 +3299,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
BatchActivateTemplateStatement batchActivateTemplateStatement,
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(batchActivateTemplateStatement);
+ analysis.setTreeStatement(batchActivateTemplateStatement);
Map<PartialPath, Pair<Template, PartialPath>> deviceTemplateSetInfoMap =
new
HashMap<>(batchActivateTemplateStatement.getDevicePathList().size());
@@ -3361,7 +3335,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
MPPQueryContext context) {
context.setQueryType(QueryType.WRITE);
Analysis analysis = new Analysis();
- analysis.setStatement(internalBatchActivateTemplateStatement);
+ analysis.setTreeStatement(internalBatchActivateTemplateStatement);
PathPatternTree patternTree = new PathPatternTree();
for (PartialPath activatePath :
@@ -3382,7 +3356,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowPathsUsingTemplate(
ShowPathsUsingTemplateStatement showPathsUsingTemplateStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showPathsUsingTemplateStatement);
+ analysis.setTreeStatement(showPathsUsingTemplateStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowPathsUsingTemplateHeader());
Pair<Template, List<PartialPath>> templateSetInfo =
@@ -3429,7 +3403,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowQueries(
ShowQueriesStatement showQueriesStatement, MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showQueriesStatement);
+ analysis.setTreeStatement(showQueriesStatement);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowQueriesHeader());
analysis.setVirtualSource(true);
@@ -3501,7 +3475,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
CreateLogicalViewStatement createLogicalViewStatement, MPPQueryContext
context) {
Analysis analysis = new Analysis();
context.setQueryType(QueryType.WRITE);
- analysis.setStatement(createLogicalViewStatement);
+ analysis.setTreeStatement(createLogicalViewStatement);
if (createLogicalViewStatement.getViewExpressions() == null) {
// Analyze query in statement
@@ -3763,7 +3737,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
ShowLogicalViewStatement showLogicalViewStatement, MPPQueryContext
context) {
context.setQueryType(QueryType.READ);
Analysis analysis = new Analysis();
- analysis.setStatement(showLogicalViewStatement);
+ analysis.setTreeStatement(showLogicalViewStatement);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(showLogicalViewStatement.getPathPattern());
@@ -3780,7 +3754,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
public Analysis visitShowCurrentTimestamp(
ShowCurrentTimestampStatement showCurrentTimestampStatement,
MPPQueryContext context) {
Analysis analysis = new Analysis();
- analysis.setStatement(showCurrentTimestampStatement);
+ analysis.setTreeStatement(showCurrentTimestampStatement);
analysis.setFinishQueryAfterAnalyze(true);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowCurrentTimestampHeader());
return analysis;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
index bb3821aef6e..1fcb7bf41ec 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
@@ -20,9 +20,11 @@
package org.apache.iotdb.db.queryengine.plan.analyze;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.partition.DataPartition;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
+import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.tsfile.read.common.block.TsBlock;
public interface IAnalysis {
@@ -50,4 +52,17 @@ public interface IAnalysis {
default void setFailStatus(TSStatus status) {
}
+
+ default boolean isFinishQueryAfterAnalyze() {
+ return false;
+ }
+
+ default void setTreeStatement(Statement realStatement) {}
+
+ default void setDataPartitionInfo(DataPartition dataPartition) {
+ }
+
+ default Statement getTreeStatement(){
+ return null;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/LoadTsfileAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/LoadTsfileAnalyzer.java
index a372772e374..70d0a382525 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/LoadTsfileAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/LoadTsfileAnalyzer.java
@@ -195,7 +195,7 @@ public class LoadTsfileAnalyzer {
// data partition will be queried in the scheduler
final Analysis analysis = new Analysis();
- analysis.setStatement(loadTsFileStatement);
+ analysis.setTreeStatement(loadTsFileStatement);
return analysis;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java
index 7a37902dbb9..6a2bbab43fd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/StatementMemorySourceVisitor.java
@@ -79,7 +79,7 @@ public class StatementMemorySourceVisitor
@Override
public StatementMemorySource visitExplain(
ExplainStatement node, StatementMemorySourceContext context) {
- context.getAnalysis().setStatement(node.getQueryStatement());
+ context.getAnalysis().setTreeStatement(node.getQueryStatement());
DatasetHeader header =
new DatasetHeader(
Collections.singletonList(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
index 00907e2f669..8f0c7e5dad9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
@@ -79,7 +79,7 @@ public class AggregationPushDown implements PlanOptimizer {
@Override
public PlanNode optimize(PlanNode plan, Analysis analysis, MPPQueryContext
context) {
- if (analysis.getStatement().getType() != StatementType.QUERY) {
+ if (analysis.getTreeStatement().getType() != StatementType.QUERY) {
return plan;
}
QueryStatement queryStatement = analysis.getQueryStatement();
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 f90346f3c51..921ab330588 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
@@ -63,7 +63,7 @@ public class ColumnInjectionPushDown implements PlanOptimizer
{
@Override
public PlanNode optimize(PlanNode plan, Analysis analysis, MPPQueryContext
context) {
- if (analysis.getStatement().getType() != StatementType.QUERY) {
+ if (analysis.getTreeStatement().getType() != StatementType.QUERY) {
return plan;
}
QueryStatement queryStatement = analysis.getQueryStatement();
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 df73a23dd18..da560a63026 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
@@ -67,7 +67,7 @@ public class LimitOffsetPushDown implements PlanOptimizer {
@Override
public PlanNode optimize(PlanNode plan, Analysis analysis, MPPQueryContext
context) {
- if (analysis.getStatement().getType() != StatementType.QUERY) {
+ if (analysis.getTreeStatement().getType() != StatementType.QUERY) {
return plan;
}
QueryStatement queryStatement = analysis.getQueryStatement();
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 1f0730b3c6b..90b5d2fdb43 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 {
@Override
public PlanNode optimize(PlanNode plan, Analysis analysis, MPPQueryContext
context) {
- if (analysis.getStatement().getType() != StatementType.QUERY) {
+ if (analysis.getTreeStatement().getType() != StatementType.QUERY) {
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 65a7023bb31..475eced371d 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
@@ -62,7 +62,7 @@ public class PredicatePushDown implements PlanOptimizer {
@Override
public PlanNode optimize(PlanNode plan, Analysis analysis, MPPQueryContext
context) {
- if (analysis.getStatement().getType() != StatementType.QUERY) {
+ if (analysis.getTreeStatement().getType() != StatementType.QUERY) {
return plan;
}
QueryStatement queryStatement = analysis.getQueryStatement();
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 5f460f0267d..64f6b273176 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
@@ -45,7 +45,7 @@ public class LogicalPlanner {
public LogicalQueryPlan plan(Analysis analysis) {
long startTime = System.nanoTime();
- PlanNode rootNode = new
LogicalPlanVisitor(analysis).process(analysis.getStatement(), context);
+ PlanNode rootNode = new
LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), context);
// optimize the query logical plan
if (analysis.isQuery()) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TreeModelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TreeModelPlanner.java
index 843374ec49c..a819fa950de 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TreeModelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TreeModelPlanner.java
@@ -162,9 +162,9 @@ public class TreeModelPlanner implements IPlanner {
// Get the inner statement of PipeEnrichedStatement
Statement statementToRedirect =
- analysis.getStatement() instanceof PipeEnrichedStatement
- ? ((PipeEnrichedStatement)
analysis.getStatement()).getInnerStatement()
- : analysis.getStatement();
+ analysis.getTreeStatement() instanceof PipeEnrichedStatement
+ ? ((PipeEnrichedStatement)
analysis.getTreeStatement()).getInnerStatement()
+ : analysis.getTreeStatement();
if (statementToRedirect instanceof InsertBaseStatement
&& !analysis.isFinishQueryAfterAnalyze()) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
index 4a4d168a321..dd0974ac635 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
@@ -89,7 +89,7 @@ public class DistributionPlanner {
public PlanNode addExchangeNode(PlanNode root) {
ExchangeNodeAdder adder = new ExchangeNodeAdder(this.analysis);
NodeGroupContext nodeGroupContext =
- new NodeGroupContext(context, analysis.getStatement(), root);
+ new NodeGroupContext(context, analysis.getTreeStatement(), root);
PlanNode newRoot = adder.visit(root, nodeGroupContext);
adjustUpStream(newRoot, nodeGroupContext);
return newRoot;
@@ -112,8 +112,8 @@ public class DistributionPlanner {
}
final boolean needShuffleSinkNode =
- analysis.getStatement() instanceof QueryStatement
- && needShuffleSinkNode((QueryStatement) analysis.getStatement(),
context);
+ analysis.getTreeStatement() instanceof QueryStatement
+ && needShuffleSinkNode((QueryStatement)
analysis.getTreeStatement(), context);
adjustUpStreamHelper(root, new HashMap<>(), needShuffleSinkNode, context);
}
@@ -183,7 +183,7 @@ public class DistributionPlanner {
}
public PlanNode optimize(PlanNode rootWithExchange) {
- if (analysis.getStatement() != null && analysis.getStatement().isQuery()) {
+ if (analysis.getTreeStatement() != null &&
analysis.getTreeStatement().isQuery()) {
for (PlanOptimizer optimizer : optimizers) {
rootWithExchange = optimizer.optimize(rootWithExchange, analysis,
context);
}
@@ -201,7 +201,7 @@ public class DistributionPlanner {
PlanNode rootWithExchange = addExchangeNode(rootAfterRewrite);
PlanNode optimizedRootWithExchange = optimize(rootWithExchange);
- if (analysis.getStatement() != null && analysis.getStatement().isQuery()) {
+ if (analysis.getTreeStatement() != null &&
analysis.getTreeStatement().isQuery()) {
analysis
.getRespDatasetHeader()
.setColumnToTsBlockIndexMap(optimizedRootWithExchange.getOutputColumnNames());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
index 0a7f17166c3..e955f5f5a22 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
@@ -106,8 +106,8 @@ public class SimpleFragmentParallelPlanner implements
IFragmentParallelPlaner {
dataNodeFIMap.get(fragmentInstance.getHostDataNode()).size()));
// compute dataNodeSeriesScanNum in LastQueryScanNode
- if (analysis.getStatement() instanceof QueryStatement
- && ((QueryStatement) analysis.getStatement()).isLastQuery()) {
+ if (analysis.getTreeStatement() instanceof QueryStatement
+ && ((QueryStatement) analysis.getTreeStatement()).isLastQuery()) {
final Map<Path, AtomicInteger> pathSumMap = new HashMap<>();
dataNodeFIMap
.values()
@@ -183,11 +183,11 @@ public class SimpleFragmentParallelPlanner implements
IFragmentParallelPlaner {
return v;
});
- if (analysis.getStatement() instanceof QueryStatement
- || analysis.getStatement() instanceof ExplainAnalyzeStatement
- || analysis.getStatement() instanceof ShowQueriesStatement
- || (analysis.getStatement() instanceof ShowTimeSeriesStatement
- && ((ShowTimeSeriesStatement)
analysis.getStatement()).isOrderByHeat())) {
+ if (analysis.getTreeStatement() instanceof QueryStatement
+ || analysis.getTreeStatement() instanceof ExplainAnalyzeStatement
+ || analysis.getTreeStatement() instanceof ShowQueriesStatement
+ || (analysis.getTreeStatement() instanceof ShowTimeSeriesStatement
+ && ((ShowTimeSeriesStatement)
analysis.getTreeStatement()).isOrderByHeat())) {
fragmentInstance.getFragment().generateTypeProvider(queryContext.getTypeProvider());
}
instanceMap.putIfAbsent(fragment.getId(), fragmentInstance);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
index 74df1b08dbd..b7bb2b24859 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
@@ -91,10 +91,10 @@ public class LoadTsFileNode extends WritePlanNode {
public List<WritePlanNode> splitByPartition(Analysis analysis) {
List<WritePlanNode> res = new ArrayList<>();
LoadTsFileStatement statement =
- analysis.getStatement() instanceof PipeEnrichedStatement
+ analysis.getTreeStatement() instanceof PipeEnrichedStatement
? (LoadTsFileStatement)
- ((PipeEnrichedStatement)
analysis.getStatement()).getInnerStatement()
- : (LoadTsFileStatement) analysis.getStatement();
+ ((PipeEnrichedStatement)
analysis.getTreeStatement()).getInnerStatement()
+ : (LoadTsFileStatement) analysis.getTreeStatement();
for (int i = 0; i < resources.size(); i++) {
res.add(
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 9faf14e320d..b8749f6957f 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
@@ -186,7 +186,7 @@ public class Analysis implements IAnalysis {
return parameters;
}
- public Statement getStatement() {
+ public Statement getTreeStatement() {
return root;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 75e7153513a..9ba4c068c7f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.IoTDBWarning;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils;
import org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis;
import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
import org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator;
@@ -372,36 +373,11 @@ public class StatementAnalyzer {
final MPPQueryContext context = insert.getContext();
final InsertTabletStatement insertTabletStatement =
insert.getInnerTreeStatement();
- context.setQueryType(QueryType.WRITE);
- insertTabletStatement.semanticCheck();
- IAnalysis analysis = new
org.apache.iotdb.db.queryengine.plan.analyze.Analysis();
-
- validateSchema(analysis, insertTabletStatement,
- () -> SchemaValidator.validate(metadata, insert, context));
- InsertBaseStatement realStatement = removeLogicalView(analysis,
insertTabletStatement);
- if (analysis.isFinishQueryAfterAnalyze()) {
- return ret;
- }
- analysis.setStatement(realStatement);
-
- if (realStatement instanceof InsertTabletStatement) {
- InsertTabletStatement realInsertTabletStatement =
(InsertTabletStatement) realStatement;
- DataPartitionQueryParam dataPartitionQueryParam = new
DataPartitionQueryParam();
- dataPartitionQueryParam.setDevicePath(
- realInsertTabletStatement.getDevicePath().getFullPath());
- dataPartitionQueryParam.setTimePartitionSlotList(
- realInsertTabletStatement.getTimePartitionSlots());
-
- analysis = getAnalysisForWriting(
- analysis,
- Collections.singletonList(dataPartitionQueryParam),
- context.getSession().getUserName(), partitionFetcher);
- } else {
- analysis = computeAnalysisForMultiTablets(
- analysis,
- (InsertMultiTabletsStatement) realStatement,
- context.getSession().getUserName(), partitionFetcher);
- }
+
+ IAnalysis analysis = AnalyzeUtils.analyzeInsert(context,
insertTabletStatement,
+ () -> SchemaValidator.validate(metadata, insert, context),
+ metadata::getOrCreateDataPartition);
+
// TODO-TableIngestion: use IAnalysis
// StatementAnalyzer.this.analysis = analysis;
return ret;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
index df047d7d652..1411338c070 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java
@@ -19,6 +19,9 @@
package org.apache.iotdb.db.queryengine.plan.relational.metadata;
+import java.util.Map;
+import org.apache.iotdb.commons.partition.DataPartition;
+import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import
org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputationWithAutoCreation;
@@ -84,4 +87,16 @@ public interface Metadata {
MPPQueryContext context) {
throw new UnsupportedOperationException();
}
+
+ /**
+ * Get or create data partition, used in cluster write scenarios. if
enableAutoCreateSchema is
+ * true and database/series/time slots not exists, then automatically create.
+ *
+ * @param dataPartitionQueryParams the list of DataPartitionQueryParams
+ * @param userName
+ */
+ default DataPartition getOrCreateDataPartition(
+ List<DataPartitionQueryParam> dataPartitionQueryParams, String userName)
{
+ throw new UnsupportedOperationException();
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
index 719ede30231..8526d39da25 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
@@ -85,7 +85,7 @@ public class LogicalPlanner {
}
public LogicalQueryPlan plan(Analysis analysis) throws IoTDBException {
- PlanNode planNode = planStatement(analysis, analysis.getStatement());
+ PlanNode planNode = planStatement(analysis, analysis.getTreeStatement());
relationalPlanOptimizers.forEach(
optimizer ->
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
index 623217e340f..6ce858d179d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
@@ -141,7 +141,7 @@ public class FragmentInstanceGenerator {
return v;
});
- if (analysis.getStatement() instanceof Query) {
+ if (analysis.getTreeStatement() instanceof Query) {
fragmentInstance.getFragment().generateTableModelTypeProvider(queryContext.getTypeProvider());
}
instanceMap.putIfAbsent(fragment.getId(), fragmentInstance);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
index 83f1548ee3a..7fa34d6de89 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
@@ -59,7 +59,7 @@ public class TableDistributionPlanner {
}
PlanNode outputNodeWithExchange = distributedPlanNodeResult.get(0);
- if (analysis.getStatement() instanceof Query) {
+ if (analysis.getTreeStatement() instanceof Query) {
analysis
.getRespDatasetHeader()
.setColumnToTsBlockIndexMap(
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java
index b9681477344..a3716c720de 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeTest.java
@@ -642,7 +642,7 @@ public class AnalyzeTest {
for (int i = 0; i < sqls.length; i++) {
Analysis analysis = analyzeSQL(sqls[i]);
- QueryStatement queryStatement = (QueryStatement) analysis.getStatement();
+ QueryStatement queryStatement = (QueryStatement)
analysis.getTreeStatement();
if (predicates[i] == null) {
Assert.assertNull(queryStatement.getWhereCondition());
} else {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/OptimizationTestUtil.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/OptimizationTestUtil.java
index 2df3f0ef124..921ea82cc54 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/OptimizationTestUtil.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/OptimizationTestUtil.java
@@ -122,7 +122,7 @@ public class OptimizationTestUtil {
Analysis analysis = analyzer.analyze(statement);
PlanNode actualPlan =
- new LogicalPlanVisitor(analysis).process(analysis.getStatement(),
context);
+ new LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(),
context);
for (PlanOptimizer preOptimizer : preOptimizers) {
actualPlan = preOptimizer.optimize(actualPlan, analysis, context);
}
@@ -142,7 +142,7 @@ public class OptimizationTestUtil {
Analysis analysis = analyzer.analyze(statement);
PlanNode actualPlan =
- new LogicalPlanVisitor(analysis).process(analysis.getStatement(),
context);
+ new LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(),
context);
for (PlanOptimizer preOptimizer : preOptimizers) {
actualPlan = preOptimizer.optimize(actualPlan, analysis, context);
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
index 59cd36a2f8a..223d12f6af3 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
@@ -228,8 +228,8 @@ public class Util {
analysis.setSchemaPartitionInfo(schemaPartition);
analysis.setSchemaTree(genSchemaTree());
// to avoid some special case which is not the point of test
- analysis.setStatement(Mockito.mock(QueryStatement.class));
- Mockito.when(analysis.getStatement().isQuery()).thenReturn(false);
+ analysis.setTreeStatement(Mockito.mock(QueryStatement.class));
+ Mockito.when(analysis.getTreeStatement().isQuery()).thenReturn(false);
return analysis;
} catch (IllegalPathException e) {
return new Analysis();
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
index eb802edd9e5..a2583bf812a 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
@@ -142,8 +142,8 @@ public class Util2 {
analysis.setSchemaPartitionInfo(schemaPartition);
analysis.setSchemaTree(genSchemaTree());
// to avoid some special case which is not the point of test
- analysis.setStatement(Mockito.mock(QueryStatement.class));
- Mockito.when(analysis.getStatement().isQuery()).thenReturn(false);
+ analysis.setTreeStatement(Mockito.mock(QueryStatement.class));
+ Mockito.when(analysis.getTreeStatement().isQuery()).thenReturn(false);
return analysis;
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/LogicalPlannerTestUtil.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/LogicalPlannerTestUtil.java
index 176cc7bde18..f48b2ef6d43 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/LogicalPlannerTestUtil.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/logical/LogicalPlannerTestUtil.java
@@ -55,6 +55,6 @@ public class LogicalPlannerTestUtil {
Analyzer analyzer =
new Analyzer(context, new FakePartitionFetcherImpl(), new
FakeSchemaFetcherImpl());
Analysis analysis = analyzer.analyze(statement);
- return new LogicalPlanVisitor(analysis).process(analysis.getStatement(),
context);
+ return new
LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), context);
}
}