blob: bda66843a97911fbb8c5520baec4f1589c8ee791 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.iotdb.db.queryengine.plan.planner.plan.node;
import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.load.LoadTsFilePieceNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.CountSchemaMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.DevicesCountNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.DevicesSchemaScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.LevelTimeSeriesCountNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.LogicalViewSchemaScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodeManagementMemoryMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodePathsConvertNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodePathsCountNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodePathsSchemaScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.PathsUsingTemplateScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaFetchMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaFetchScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaQueryMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaQueryOrderByHeatNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.TimeSeriesCountNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.TimeSeriesSchemaScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.ActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.AlterTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.BatchActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.ConstructSchemaBlackListNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateAlignedTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateMultiTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.CreateTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.DeactivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.DeleteTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalBatchActivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalCreateMultiTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.InternalCreateTimeSeriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.PreDeactivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.RollbackPreDeactivateTemplateNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.RollbackSchemaBlackListNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.AlterLogicalViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.ConstructLogicalViewBlackListNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.CreateLogicalViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.DeleteLogicalViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.write.view.RollbackLogicalViewBlackListNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedDeleteDataNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedInsertNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedNonWritePlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedWritePlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeOperateSchemaQueueNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FillNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FilterNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByLevelNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByTagNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.HorizontallyConcatNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.IntoNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.LimitNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.MergeSortNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.OffsetNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ProjectNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleDeviceViewNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWindowAggregationNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.LeftOuterTimeJoinNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryCollectNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryMergeNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryTransformNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.ShuffleSinkNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedLastQueryScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesAggregationScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.LastQueryScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.ShowQueriesNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.DeleteDataNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertMultiTabletsNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertRowsOfOneDeviceNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTabletNode;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
public enum PlanNodeType {
AGGREGATE((short) 0),
DEVICE_VIEW((short) 1),
FILL((short) 2),
FILTER((short) 3),
FILTER_NULL((short) 4),
GROUP_BY_LEVEL((short) 5),
LIMIT((short) 6),
OFFSET((short) 7),
SORT((short) 8),
FULL_OUTER_TIME_JOIN((short) 9),
FRAGMENT_SINK((short) 10),
SERIES_SCAN((short) 11),
SERIES_AGGREGATE_SCAN((short) 12),
INSERT_TABLET((short) 13),
INSERT_ROW((short) 14),
INSERT_ROWS((short) 15),
INSERT_ROWS_OF_ONE_DEVICE((short) 16),
INSERT_MULTI_TABLET((short) 17),
DEVICES_SCHEMA_SCAN((short) 18),
CREATE_TIME_SERIES((short) 19),
EXCHANGE((short) 20),
ALTER_TIME_SERIES((short) 21),
CREATE_ALIGNED_TIME_SERIES((short) 22),
TIME_SERIES_SCHEMA_SCAN((short) 23),
SCHEMA_FETCH_SCAN((short) 24),
SCHEMA_QUERY_MERGE((short) 25),
SCHEMA_QUERY_ORDER_BY_HEAT((short) 26),
DEVICES_COUNT((short) 27),
TIME_SERIES_COUNT((short) 28),
LEVEL_TIME_SERIES_COUNT((short) 29),
COUNT_MERGE((short) 30),
SLIDING_WINDOW_AGGREGATION((short) 31),
PROJECT((short) 32),
ALIGNED_SERIES_SCAN((short) 33),
ALIGNED_SERIES_AGGREGATE_SCAN((short) 34),
DEVICE_MERGE((short) 35),
SCHEMA_FETCH_MERGE((short) 36),
TRANSFORM((short) 37),
CREATE_MULTI_TIME_SERIES((short) 39),
NODE_PATHS_SCAN((short) 40),
NODE_PATHS_CONVERT((short) 41),
NODE_MANAGEMENT_MEMORY_MERGE((short) 42),
DELETE_DATA((short) 44),
DELETE_TIME_SERIES((short) 45),
LAST_QUERY_SCAN((short) 46),
ALIGNED_LAST_QUERY_SCAN((short) 47),
LAST_QUERY((short) 48),
LAST_QUERY_MERGE((short) 49),
LAST_QUERY_COLLECT((short) 50),
NODE_PATHS_COUNT((short) 51),
INTERNAL_CREATE_TIME_SERIES((short) 52),
ACTIVATE_TEMPLATE((short) 53),
PATHS_USING_TEMPLATE_SCAN((short) 54),
LOAD_TSFILE((short) 55),
CONSTRUCT_SCHEMA_BLACK_LIST_NODE((short) 56),
ROLLBACK_SCHEMA_BLACK_LIST_NODE((short) 57),
GROUP_BY_TAG((short) 58),
PRE_DEACTIVATE_TEMPLATE_NODE((short) 59),
ROLLBACK_PRE_DEACTIVATE_TEMPLATE_NODE((short) 60),
DEACTIVATE_TEMPLATE_NODE((short) 61),
INTO((short) 62),
DEVICE_VIEW_INTO((short) 63),
VERTICALLY_CONCAT((short) 64),
SINGLE_DEVICE_VIEW((short) 65),
MERGE_SORT((short) 66),
SHOW_QUERIES((short) 67),
INTERNAL_BATCH_ACTIVATE_TEMPLATE((short) 68),
INTERNAL_CREATE_MULTI_TIMESERIES((short) 69),
IDENTITY_SINK((short) 70),
SHUFFLE_SINK((short) 71),
BATCH_ACTIVATE_TEMPLATE((short) 72),
CREATE_LOGICAL_VIEW((short) 73),
CONSTRUCT_LOGICAL_VIEW_BLACK_LIST((short) 74),
ROLLBACK_LOGICAL_VIEW_BLACK_LIST((short) 75),
DELETE_LOGICAL_VIEW((short) 76),
LOGICAL_VIEW_SCHEMA_SCAN((short) 77),
ALTER_LOGICAL_VIEW((short) 78),
PIPE_ENRICHED_INSERT_DATA((short) 79),
// NodeId 80 is used by IoTDB-ML which shouldn't be used.
LAST_QUERY_TRANSFORM((short) 81),
TOP_K((short) 82),
COLUMN_INJECT((short) 83),
PIPE_ENRICHED_DELETE_DATA((short) 84),
PIPE_ENRICHED_WRITE((short) 85),
PIPE_ENRICHED_NON_WRITE((short) 86),
INNER_TIME_JOIN((short) 87),
LEFT_OUTER_TIME_JOIN((short) 88),
AGG_MERGE_SORT((short) 89),
EXPLAIN_ANALYZE((short) 90),
PIPE_OPERATE_SCHEMA_QUEUE_REFERENCE((short) 91),
;
public static final int BYTES = Short.BYTES;
private final short nodeType;
PlanNodeType(short nodeType) {
this.nodeType = nodeType;
}
public short getNodeType() {
return nodeType;
}
public void serialize(ByteBuffer buffer) {
ReadWriteIOUtils.write(nodeType, buffer);
}
public void serialize(DataOutputStream stream) throws IOException {
ReadWriteIOUtils.write(nodeType, stream);
}
public static PlanNode deserializeFromWAL(DataInputStream stream) throws IOException {
short nodeType = stream.readShort();
switch (nodeType) {
case 13:
return InsertTabletNode.deserializeFromWAL(stream);
case 14:
return InsertRowNode.deserializeFromWAL(stream);
case 44:
return DeleteDataNode.deserializeFromWAL(stream);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
}
public static PlanNode deserializeFromWAL(ByteBuffer buffer) {
short nodeType = buffer.getShort();
switch (nodeType) {
case 13:
return InsertTabletNode.deserializeFromWAL(buffer);
case 14:
return InsertRowNode.deserializeFromWAL(buffer);
case 44:
return DeleteDataNode.deserializeFromWAL(buffer);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
}
public static PlanNode deserialize(ByteBuffer buffer) {
short nodeType = buffer.getShort();
return deserialize(buffer, nodeType);
}
public static PlanNode deserialize(ByteBuffer buffer, short nodeType) {
switch (nodeType) {
case 0:
return AggregationNode.deserialize(buffer);
case 1:
return DeviceViewNode.deserialize(buffer);
case 2:
return FillNode.deserialize(buffer);
case 3:
return FilterNode.deserialize(buffer);
case 5:
return GroupByLevelNode.deserialize(buffer);
case 6:
return LimitNode.deserialize(buffer);
case 7:
return OffsetNode.deserialize(buffer);
case 8:
return SortNode.deserialize(buffer);
case 9:
return FullOuterTimeJoinNode.deserialize(buffer);
case 11:
return SeriesScanNode.deserialize(buffer);
case 12:
return SeriesAggregationScanNode.deserialize(buffer);
case 13:
return InsertTabletNode.deserialize(buffer);
case 14:
return InsertRowNode.deserialize(buffer);
case 15:
return InsertRowsNode.deserialize(buffer);
case 16:
return InsertRowsOfOneDeviceNode.deserialize(buffer);
case 17:
return InsertMultiTabletsNode.deserialize(buffer);
case 18:
return DevicesSchemaScanNode.deserialize(buffer);
case 19:
return CreateTimeSeriesNode.deserialize(buffer);
case 20:
return ExchangeNode.deserialize(buffer);
case 21:
return AlterTimeSeriesNode.deserialize(buffer);
case 22:
return CreateAlignedTimeSeriesNode.deserialize(buffer);
case 23:
return TimeSeriesSchemaScanNode.deserialize(buffer);
case 24:
return SchemaFetchScanNode.deserialize(buffer);
case 25:
return SchemaQueryMergeNode.deserialize(buffer);
case 26:
return SchemaQueryOrderByHeatNode.deserialize(buffer);
case 27:
return DevicesCountNode.deserialize(buffer);
case 28:
return TimeSeriesCountNode.deserialize(buffer);
case 29:
return LevelTimeSeriesCountNode.deserialize(buffer);
case 30:
return CountSchemaMergeNode.deserialize(buffer);
case 31:
return SlidingWindowAggregationNode.deserialize(buffer);
case 32:
return ProjectNode.deserialize(buffer);
case 33:
return AlignedSeriesScanNode.deserialize(buffer);
case 34:
return AlignedSeriesAggregationScanNode.deserialize(buffer);
case 35:
return DeviceMergeNode.deserialize(buffer);
case 36:
return SchemaFetchMergeNode.deserialize(buffer);
case 37:
return TransformNode.deserialize(buffer);
case 39:
return CreateMultiTimeSeriesNode.deserialize(buffer);
case 40:
return NodePathsSchemaScanNode.deserialize(buffer);
case 41:
return NodePathsConvertNode.deserialize(buffer);
case 42:
return NodeManagementMemoryMergeNode.deserialize(buffer);
case 44:
return DeleteDataNode.deserialize(buffer);
case 45:
return DeleteTimeSeriesNode.deserialize(buffer);
case 46:
return LastQueryScanNode.deserialize(buffer);
case 47:
return AlignedLastQueryScanNode.deserialize(buffer);
case 48:
return LastQueryNode.deserialize(buffer);
case 49:
return LastQueryMergeNode.deserialize(buffer);
case 50:
return LastQueryCollectNode.deserialize(buffer);
case 51:
return NodePathsCountNode.deserialize(buffer);
case 52:
return InternalCreateTimeSeriesNode.deserialize(buffer);
case 53:
return ActivateTemplateNode.deserialize(buffer);
case 54:
return PathsUsingTemplateScanNode.deserialize(buffer);
case 55:
return LoadTsFilePieceNode.deserialize(buffer);
case 56:
return ConstructSchemaBlackListNode.deserialize(buffer);
case 57:
return RollbackSchemaBlackListNode.deserialize(buffer);
case 58:
return GroupByTagNode.deserialize(buffer);
case 59:
return PreDeactivateTemplateNode.deserialize(buffer);
case 60:
return RollbackPreDeactivateTemplateNode.deserialize(buffer);
case 61:
return DeactivateTemplateNode.deserialize(buffer);
case 62:
return IntoNode.deserialize(buffer);
case 63:
return DeviceViewIntoNode.deserialize(buffer);
case 64:
return HorizontallyConcatNode.deserialize(buffer);
case 65:
return SingleDeviceViewNode.deserialize(buffer);
case 66:
return MergeSortNode.deserialize(buffer);
case 67:
return ShowQueriesNode.deserialize(buffer);
case 68:
return InternalBatchActivateTemplateNode.deserialize(buffer);
case 69:
return InternalCreateMultiTimeSeriesNode.deserialize(buffer);
case 70:
return IdentitySinkNode.deserialize(buffer);
case 71:
return ShuffleSinkNode.deserialize(buffer);
case 72:
return BatchActivateTemplateNode.deserialize(buffer);
case 73:
return CreateLogicalViewNode.deserialize(buffer);
case 74:
return ConstructLogicalViewBlackListNode.deserialize(buffer);
case 75:
return RollbackLogicalViewBlackListNode.deserialize(buffer);
case 76:
return DeleteLogicalViewNode.deserialize(buffer);
case 77:
return LogicalViewSchemaScanNode.deserialize(buffer);
case 78:
return AlterLogicalViewNode.deserialize(buffer);
case 79:
return PipeEnrichedInsertNode.deserialize(buffer);
case 81:
return LastQueryTransformNode.deserialize(buffer);
case 82:
return TopKNode.deserialize(buffer);
case 83:
return ColumnInjectNode.deserialize(buffer);
case 84:
return PipeEnrichedDeleteDataNode.deserialize(buffer);
case 85:
return PipeEnrichedWritePlanNode.deserialize(buffer);
case 86:
return PipeEnrichedNonWritePlanNode.deserialize(buffer);
case 87:
return InnerTimeJoinNode.deserialize(buffer);
case 88:
return LeftOuterTimeJoinNode.deserialize(buffer);
case 89:
return AggregationMergeSortNode.deserialize(buffer);
case 90:
return ExplainAnalyzeNode.deserialize(buffer);
case 91:
return PipeOperateSchemaQueueNode.deserialize(buffer);
default:
throw new IllegalArgumentException("Invalid node type: " + nodeType);
}
}
public static PlanNode deserializeWithTemplate(ByteBuffer buffer, TypeProvider typeProvider) {
short nodeType = buffer.getShort();
switch (nodeType) {
case 3:
return FilterNode.deserializeUseTemplate(buffer, typeProvider);
case 33:
return AlignedSeriesScanNode.deserializeUseTemplate(buffer, typeProvider);
case 65:
return SingleDeviceViewNode.deserializeUseTemplate(buffer, typeProvider);
case 32:
return ProjectNode.deserializeUseTemplate(buffer, typeProvider);
default:
return deserialize(buffer, nodeType);
}
}
}