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 <[email protected]> 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); + } }
