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);
+   }
  }