You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/05/31 07:53:07 UTC
[iotdb] 01/02: Merge branch 'master' into query_plan_visualization
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch query_plan_visualization
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit f2521616cf9049c59e9fc93c8b2bb07221f9418f
Merge: 312a82b9c6 ecbea664df
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Tue May 31 15:02:19 2022 +0800
Merge branch 'master' into query_plan_visualization
.../confignode/client/AsyncDataNodeClientPool.java | 19 ++-
...Handler.java => FunctionManagementHandler.java} | 6 +-
.../consensus/request/ConfigRequest.java | 4 +
.../consensus/request/ConfigRequestType.java | 1 +
.../consensus/request/write/DropFunctionReq.java | 56 +++++++
.../iotdb/confignode/manager/ConfigManager.java | 8 +
.../apache/iotdb/confignode/manager/Manager.java | 2 +
.../iotdb/confignode/manager/UDFManager.java | 59 +++++++-
.../iotdb/confignode/persistence/UDFInfo.java | 25 +++-
.../executor/ConfigRequestExecutor.java | 8 +-
.../thrift/ConfigNodeRPCServiceProcessor.java | 6 +
.../db/integration/sync/IoTDBSyncReceiverIT.java | 5 +-
.../apache/iotdb/commons/conf/IoTDBConstant.java | 1 -
.../iotdb/commons/partition/DataPartition.java | 5 +-
.../commons/partition/DataPartitionQueryParam.java | 16 ++
.../apache/iotdb/commons/partition/Partition.java | 4 +
.../commons/partition/RegionReplicaSetInfo.java | 16 +-
.../iotdb/commons/partition/SchemaPartition.java | 5 +-
.../service/AbstractThriftServiceThread.java | 38 +----
.../udf/service/UDFRegistrationService.java | 8 +-
.../apache/iotdb/db/client/ConfigNodeClient.java | 17 +++
.../statemachine/visitor/DataExecutionVisitor.java | 17 +++
.../apache/iotdb/db/engine/StorageEngineV2.java | 11 +-
.../iotdb/db/engine/memtable/AbstractMemTable.java | 7 +-
.../iotdb/db/engine/storagegroup/DataRegion.java | 87 ++++++++++-
.../db/engine/storagegroup/TsFileProcessor.java | 2 +-
.../SmoothQueueSlidingWindowAggregator.java | 1 +
.../iotdb/db/mpp/common/header/HeaderConstant.java | 4 +-
.../execution/operator/process/FilterOperator.java | 80 +++++-----
.../operator/process/LinearFillOperator.java | 3 +-
.../operator/process/TransformOperator.java | 70 +++++----
.../operator/process/UpdateLastCacheOperator.java | 5 +
.../operator/process/merge/SingleColumnMerger.java | 4 +-
.../operator/schema/SchemaQueryMergeOperator.java | 2 -
.../schema/SchemaQueryOrderByHeatOperator.java | 161 +++++++++++++++++++++
.../execution/schedule/AbstractDriverThread.java | 8 +-
.../db/mpp/execution/schedule/DriverScheduler.java | 34 +++--
.../schedule/FragmentInstanceAbortedException.java | 1 +
.../apache/iotdb/db/mpp/plan/analyze/Analyzer.java | 144 +++++++++---------
.../mpp/plan/analyze/ClusterPartitionFetcher.java | 7 +-
.../db/mpp/plan/analyze/ClusterSchemaFetcher.java | 4 +-
.../db/mpp/plan/analyze/ExpressionAnalyzer.java | 10 +-
.../db/mpp/plan/analyze/FakeSchemaFetcherImpl.java | 6 +
.../iotdb/db/mpp/plan/analyze/ISchemaFetcher.java | 3 +
.../mpp/plan/analyze/StandaloneSchemaFetcher.java | 6 +
.../plan/execution/config/ConfigTaskVisitor.java | 7 +
.../plan/execution/config/DropFunctionTask.java | 99 +++++++++++++
.../execution/config/ShowStorageGroupTask.java | 7 +-
.../db/mpp/plan/execution/config/ShowTTLTask.java | 5 +-
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 86 ++++++++++-
.../db/mpp/plan/parser/StatementGenerator.java | 15 ++
.../db/mpp/plan/planner/LocalExecutionPlanner.java | 23 ++-
.../db/mpp/plan/planner/LogicalPlanBuilder.java | 38 ++---
.../iotdb/db/mpp/plan/planner/LogicalPlanner.java | 49 ++++---
.../planner/distribution/ExchangeNodeAdder.java | 37 +----
.../plan/planner/distribution/SourceRewriter.java | 85 -----------
.../mpp/plan/planner/plan/node/PlanNodeType.java | 6 +-
.../db/mpp/plan/planner/plan/node/PlanVisitor.java | 5 +
.../node/metedata/read/SchemaQueryMergeNode.java | 4 +
.../metedata/read/SchemaQueryOrderByHeatNode.java | 99 +++++++++++++
.../metedata/read/TimeSeriesSchemaScanNode.java | 7 +
.../planner/plan/node/write/DeleteDataNode.java | 110 ++++++++++----
.../db/mpp/plan/statement/StatementVisitor.java | 10 ++
.../plan/statement/crud/DeleteDataStatement.java | 73 ++++++++++
.../db/mpp/plan/statement/crud/QueryStatement.java | 4 +
.../statement/metadata/DropFunctionStatement.java | 60 ++++++++
.../query/reader/chunk/MemAlignedPageReader.java | 10 +-
.../java/org/apache/iotdb/db/service/DataNode.java | 18 ++-
.../java/org/apache/iotdb/db/service/IoTDB.java | 9 +-
.../thrift/impl/DataNodeTSIServiceImpl.java | 56 +++++--
.../service/thrift/impl/InternalServiceImpl.java | 12 ++
.../db/sync/sender/service/TransportHandler.java | 5 +-
.../db/sync/transport/client/TransportClient.java | 21 +--
.../db/tools/validate/TsFileValidationTool.java | 13 +-
.../java/org/apache/iotdb/db/wal/WALManager.java | 15 +-
.../allocation/AbstractNodeAllocationStrategy.java | 9 ++
.../db/wal/allocation/FirstCreateStrategy.java | 4 +-
.../iotdb/db/wal/buffer/AbstractWALBuffer.java | 4 +-
.../org/apache/iotdb/db/wal/buffer/WALBuffer.java | 7 +-
.../iotdb/db/wal/checkpoint/CheckpointManager.java | 40 +++--
.../iotdb/db/wal/checkpoint/MemTableInfo.java | 1 -
.../apache/iotdb/db/wal/io/CheckpointReader.java | 22 ++-
.../java/org/apache/iotdb/db/wal/node/WALNode.java | 7 +-
.../db/wal/recover/CheckpointRecoverUtils.java | 32 +++-
.../iotdb/db/wal/recover/WALNodeRecoverTask.java | 34 ++++-
.../iotdb/db/wal/utils/CheckpointFileUtils.java | 3 +-
.../apache/iotdb/db/wal/utils/WALFileUtils.java | 30 ++--
.../iotdb/db/engine/StorageEngineV2Test.java | 71 +++++++++
.../execution/operator/LinearFillOperatorTest.java | 113 ++++++++++++++-
...erTest.java => DefaultDriverSchedulerTest.java} | 2 +-
.../execution/schedule/DriverSchedulerTest.java | 2 +-
.../DriverTaskTimeoutSentinelThreadTest.java | 43 ++++++
.../iotdb/db/mpp/plan/plan/LogicalPlannerTest.java | 6 +-
.../plan/distribution/DeleteTimeseriesTest.java | 71 ---------
.../plan/node/write/DeleteDataNodeSerdeTest.java | 21 +--
.../db/sync/transport/TransportServiceTest.java | 8 +-
.../db/wal/allocation/FirstCreateStrategyTest.java | 2 +-
.../db/wal/checkpoint/CheckpointManagerTest.java | 6 +-
.../apache/iotdb/db/wal/io/CheckpointFileTest.java | 12 +-
.../iotdb/db/wal/node/ConsensusReqReaderTest.java | 14 +-
.../org/apache/iotdb/db/wal/node/WALNodeTest.java | 2 +-
.../src/main/thrift/confignode.thrift | 8 +-
thrift/src/main/thrift/mpp.thrift | 11 ++
.../iotdb/tsfile/read/common/block/TsBlock.java | 3 +-
104 files changed, 1884 insertions(+), 678 deletions(-)
diff --cc node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index ee7584b435,d7e08bcadb..b311245411
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@@ -93,10 -93,8 +93,9 @@@ public class IoTDBConstant
public static final String COLUMN_TAGS = "tags";
public static final String COLUMN_ATTRIBUTES = "attributes";
public static final String COLUMN_IS_ALIGNED = "isAligned";
+ public static final String COLUMN_DISTRIBUTION_PLAN = "distribution plan";
public static final String QUERY_ID = "queryId";
public static final String STATEMENT = "statement";
- public static final String TLL_NOT_SET = "not set";
public static final String COLUMN_ROLE = "role";
public static final String COLUMN_USER = "user";
diff --cc server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index 4b0c9a0b42,890dac8d9c..f0de05ee72
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@@ -1763,14 -1774,79 +1775,86 @@@ public class ASTVisitor extends IoTDBSq
return deleteStorageGroupStatement;
}
+ // Explain ========================================================================
-
+ @Override
+ public Statement visitExplain(IoTDBSqlParser.ExplainContext ctx) {
+ QueryStatement queryStatement = (QueryStatement) visitSelectStatement(ctx.selectStatement());
+ return new ExplainStatement(queryStatement);
+ }
+
+ @Override
+ public Statement visitDeleteStatement(IoTDBSqlParser.DeleteStatementContext ctx) {
+ DeleteDataStatement statement = new DeleteDataStatement();
+ List<IoTDBSqlParser.PrefixPathContext> prefixPaths = ctx.prefixPath();
+ List<PartialPath> pathList = new ArrayList<>();
+ for (IoTDBSqlParser.PrefixPathContext prefixPath : prefixPaths) {
+ pathList.add(parsePrefixPath(prefixPath));
+ }
+ statement.setPathList(pathList);
+ if (ctx.whereClause() != null) {
+ WhereCondition whereCondition = parseWhereClause(ctx.whereClause());
+ TimeRange timeRange = parseDeleteTimeRange(whereCondition.getPredicate());
+ statement.setTimeRange(timeRange);
+ } else {
+ statement.setTimeRange(new TimeRange(Long.MIN_VALUE, Long.MAX_VALUE));
+ }
+ return statement;
+ }
+
+ private TimeRange parseDeleteTimeRange(Expression predicate) {
+ if (predicate instanceof LogicAndExpression) {
+ TimeRange leftTimeRange =
+ parseDeleteTimeRange(((LogicAndExpression) predicate).getLeftExpression());
+ TimeRange rightTimeRange =
+ parseDeleteTimeRange(((LogicAndExpression) predicate).getRightExpression());
+ return new TimeRange(
+ Math.max(leftTimeRange.getMin(), rightTimeRange.getMin()),
+ Math.min(leftTimeRange.getMax(), rightTimeRange.getMax()));
+ } else if (predicate instanceof CompareBinaryExpression) {
+ if (((CompareBinaryExpression) predicate).getLeftExpression() instanceof TimestampOperand) {
+ return parseTimeRange(
+ predicate.getExpressionType(),
+ ((CompareBinaryExpression) predicate).getLeftExpression(),
+ ((CompareBinaryExpression) predicate).getRightExpression());
+ } else {
+ return parseTimeRange(
+ predicate.getExpressionType(),
+ ((CompareBinaryExpression) predicate).getRightExpression(),
+ ((CompareBinaryExpression) predicate).getLeftExpression());
+ }
+ } else {
+ throw new SemanticException(DELETE_RANGE_ERROR_MSG);
+ }
+ }
+
+ private TimeRange parseTimeRange(
+ ExpressionType expressionType, Expression timeExpression, Expression valueExpression) {
+ if (!(timeExpression instanceof TimestampOperand)
+ || !(valueExpression instanceof ConstantOperand)) {
+ throw new SemanticException(DELETE_ONLY_SUPPORT_TIME_EXP_ERROR_MSG);
+ }
+
+ if (((ConstantOperand) valueExpression).getDataType() != TSDataType.INT64) {
+ throw new SemanticException("The datatype of timestamp should be LONG.");
+ }
+
+ long time = Long.parseLong(((ConstantOperand) valueExpression).getValueString());
+ switch (expressionType) {
+ case LESS_THAN:
+ return new TimeRange(Long.MIN_VALUE, time - 1);
+ case LESS_EQUAL:
+ return new TimeRange(Long.MIN_VALUE, time);
+ case GREATER_THAN:
+ return new TimeRange(time + 1, Long.MAX_VALUE);
+ case GREATER_EQUAL:
+ return new TimeRange(time, Long.MAX_VALUE);
+ case EQUAL_TO:
+ return new TimeRange(time, time);
+ default:
+ throw new SemanticException(DELETE_RANGE_ERROR_MSG);
+ }
+ }
+
/** function for parsing file path used by LOAD statement. */
public String parseFilePath(String src) {
return src.substring(1, src.length() - 1);
diff --cc server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
index 724609ef7b,44f7b0919c..a697ad882a
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
@@@ -223,7 -228,7 +229,11 @@@ public abstract class StatementVisitor<
return visitStatement(showChildNodesStatement, context);
}
+ public R visitExplain(ExplainStatement explainStatement, C context) {
+ return visitStatement(explainStatement, context);
+ }
++
+ public R visitDeleteData(DeleteDataStatement deleteDataStatement, C context) {
+ return visitStatement(deleteDataStatement, context);
+ }
}