This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch new_vector
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit ae1aab985db43a268f88afc8c801780ed9ca3573
Merge: c95efc9 27ff250
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Nov 1 10:51:29 2021 +0800

    resolve conflicts

 .../cluster/client/sync/SyncClientAdaptor.java     |   2 +-
 .../iotdb/cluster/coordinator/Coordinator.java     |   2 +-
 .../cluster/log/applier/AsyncDataLogApplier.java   |   2 +-
 .../iotdb/cluster/log/applier/BaseApplier.java     |   2 +-
 .../iotdb/cluster/log/applier/DataLogApplier.java  |   2 +-
 .../manage/FilePartitionedSnapshotLogManager.java  |   2 +-
 .../log/manage/MetaSingleSnapshotLogManager.java   |   2 +-
 .../log/manage/PartitionedSnapshotLogManager.java  |   2 +-
 .../iotdb/cluster/log/snapshot/FileSnapshot.java   |   2 +-
 .../cluster/log/snapshot/MetaSimpleSnapshot.java   |   2 +-
 .../apache/iotdb/cluster/metadata/CMManager.java   |  19 +-
 .../apache/iotdb/cluster/metadata/MetaPuller.java  |   2 +-
 .../iotdb/cluster/partition/PartitionTable.java    |   2 +-
 .../cluster/query/ClusterDataQueryExecutor.java    |   2 +-
 .../cluster/query/ClusterPhysicalGenerator.java    |   4 +-
 .../iotdb/cluster/query/ClusterPlanExecutor.java   |   2 +-
 .../iotdb/cluster/query/ClusterPlanRouter.java     |   2 +-
 .../iotdb/cluster/query/LocalQueryExecutor.java    |   2 +-
 .../query/aggregate/ClusterAggregateExecutor.java  |   2 +-
 .../cluster/query/aggregate/ClusterAggregator.java |   2 +-
 .../cluster/query/fill/ClusterFillExecutor.java    |   2 +-
 .../cluster/query/fill/ClusterPreviousFill.java    |   2 +-
 .../cluster/query/fill/PreviousFillArguments.java  |   2 +-
 .../groupby/ClusterGroupByNoVFilterDataSet.java    |   2 +-
 .../groupby/ClusterGroupByVFilterDataSet.java      |   2 +-
 .../query/groupby/MergeGroupByExecutor.java        |   2 +-
 .../query/last/ClusterLastQueryExecutor.java       |   2 +-
 .../cluster/query/reader/ClusterReaderFactory.java |  12 +-
 .../cluster/query/reader/ClusterTimeGenerator.java |   2 +-
 .../query/reader/mult/MultDataSourceInfo.java      |   2 +-
 .../cluster/server/member/DataGroupMember.java     |   2 +-
 .../cluster/server/member/MetaGroupMember.java     |   2 +-
 .../iotdb/cluster/utils/ClusterQueryUtils.java     |  12 +-
 .../apache/iotdb/cluster/utils/ClusterUtils.java   |   2 +-
 .../cluster/utils/nodetool/ClusterMonitor.java     |   2 +-
 .../cluster/client/sync/SyncClientAdaptorTest.java |   2 +-
 .../org/apache/iotdb/cluster/common/IoTDBTest.java |   2 +-
 .../iotdb/cluster/common/TestLogApplier.java       |   2 +-
 .../org/apache/iotdb/cluster/common/TestUtils.java |   2 +-
 .../apache/iotdb/cluster/log/LogParserTest.java    |   2 +-
 .../log/applier/AsyncDataLogApplierTest.java       |   2 +-
 .../cluster/log/applier/DataLogApplierTest.java    |   2 +-
 .../cluster/log/applier/MetaLogApplierTest.java    |   2 +-
 .../cluster/log/logtypes/SerializeLogTest.java     |   2 +-
 .../FilePartitionedSnapshotLogManagerTest.java     |   2 +-
 .../manage/MetaSingleSnapshotLogManagerTest.java   |   2 +-
 .../cluster/log/snapshot/DataSnapshotTest.java     |   2 +-
 .../cluster/log/snapshot/FileSnapshotTest.java     |   2 +-
 .../log/snapshot/MetaSimpleSnapshotTest.java       |   2 +-
 .../log/snapshot/PartitionedSnapshotTest.java      |   2 +-
 .../cluster/log/snapshot/PullSnapshotTaskTest.java |   2 +-
 .../cluster/partition/SlotPartitionTableTest.java  |   2 +-
 .../apache/iotdb/cluster/query/BaseQueryTest.java  |   2 +-
 .../query/ClusterAggregateExecutorTest.java        |   2 +-
 .../query/ClusterDataQueryExecutorTest.java        |   2 +-
 .../query/ClusterPhysicalGeneratorTest.java        |   2 +-
 .../cluster/query/ClusterPlanExecutorTest.java     |   2 +-
 .../cluster/query/ClusterQueryRouterTest.java      |   2 +-
 .../query/fill/ClusterFillExecutorTest.java        |   2 +-
 .../ClusterGroupByNoVFilterDataSetTest.java        |   2 +-
 .../groupby/ClusterGroupByVFilterDataSetTest.java  |   2 +-
 .../query/groupby/MergeGroupByExecutorTest.java    |   2 +-
 .../query/groupby/RemoteGroupByExecutorTest.java   |   2 +-
 .../query/reader/ClusterReaderFactoryTest.java     |   2 +-
 .../query/reader/ClusterTimeGeneratorTest.java     |   2 +-
 .../mult/AssignPathManagedMergeReaderTest.java     |   2 +-
 .../reader/mult/RemoteMultSeriesReaderTest.java    |   2 +-
 .../clusterinfo/ClusterInfoServiceImplTest.java    |   2 +-
 .../handlers/forwarder/ForwardPlanHandlerTest.java |   2 +-
 .../iotdb/cluster/server/member/BaseMember.java    |   2 +-
 .../cluster/server/member/DataGroupMemberTest.java |   2 +-
 .../cluster/server/member/MetaGroupMemberTest.java |   2 +-
 .../iotdb/cluster/utils/SerializeUtilTest.java     |   2 +-
 docs/UserGuide/Advanced-Features/Triggers.md       |   2 +-
 docs/zh/UserGuide/Advanced-Features/Triggers.md    |   2 +-
 .../org/apache/iotdb/trigger/TriggerExample.java   |   2 +-
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |   2 +-
 .../apache/iotdb/db/cq/ContinuousQueryTask.java    |   2 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   2 +-
 .../inplace/manage/CrossSpaceMergeContext.java     |   2 +-
 .../inplace/manage/CrossSpaceMergeResource.java    |   2 +-
 .../cross/inplace/recover/LogAnalyzer.java         |   2 +-
 .../cross/inplace/recover/MergeLogger.java         |   2 +-
 .../cross/inplace/selector/IMergePathSelector.java |   2 +-
 .../cross/inplace/selector/NaivePathSelector.java  |   2 +-
 .../cross/inplace/task/CrossSpaceMergeTask.java    |   2 +-
 .../cross/inplace/task/MergeFileTask.java          |   2 +-
 .../cross/inplace/task/MergeMultiChunkTask.java    |   2 +-
 .../cross/inplace/task/RecoverCrossMergeTask.java  |   2 +-
 .../inner/utils/InnerSpaceCompactionUtils.java     |   2 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java |   9 +-
 .../apache/iotdb/db/engine/memtable/IMemTable.java |   2 +-
 .../db/engine/memtable/VectorWritableMemChunk.java |  16 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |   3 +-
 .../iotdb/db/engine/modification/Deletion.java     |   2 +-
 .../iotdb/db/engine/modification/Modification.java |   2 +-
 .../io/LocalTextModificationAccessor.java          |   2 +-
 .../selectinto/InsertTabletPlanGenerator.java      |   2 +-
 .../selectinto/InsertTabletPlansIterator.java      |   2 +-
 .../engine/storagegroup/StorageGroupProcessor.java |   2 +-
 .../db/engine/storagegroup/TsFileProcessor.java    | 161 +++++++++------
 .../virtualSg/HashVirtualPartitioner.java          |   2 +-
 .../storagegroup/virtualSg/VirtualPartitioner.java |   2 +-
 .../virtualSg/VirtualStorageGroupManager.java      |   2 +-
 .../service/TriggerRegistrationInformation.java    |   2 +-
 .../service/TriggerRegistrationService.java        |   2 +-
 .../sink/local/LocalIoTDBConfiguration.java        |   2 +-
 .../trigger/sink/local/LocalIoTDBHandler.java      |   2 +-
 .../trigger/sink/mqtt/MQTTConfiguration.java       |   2 +-
 .../org/apache/iotdb/db/metadata/MManager.java     |  57 +++---
 .../iotdb/db/metadata/VectorPartialPath.java       | 166 ---------------
 .../db/metadata/lastCache/LastCacheManager.java    |   2 +-
 .../iotdb/db/metadata/logfile/MLogUpgrader.java    |   2 +-
 .../iotdb/db/metadata/logfile/MLogWriter.java      |   2 +-
 .../org/apache/iotdb/db/metadata/mnode/IMNode.java |   2 +-
 .../iotdb/db/metadata/mnode/IMeasurementMNode.java |   3 +
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |   2 +-
 .../iotdb/db/metadata/mnode/MeasurementMNode.java  |  13 ++
 .../org/apache/iotdb/db/metadata/mtree/MTree.java  |  19 +-
 .../db/metadata/mtree/traverser/Traverser.java     |   2 +-
 .../traverser/collector/CollectorTraverser.java    |   2 +-
 .../mtree/traverser/collector/EntityCollector.java |   2 +-
 .../mtree/traverser/collector/MNodeCollector.java  |   2 +-
 .../traverser/collector/MeasurementCollector.java  |   2 +-
 .../traverser/collector/StorageGroupCollector.java |   2 +-
 .../mtree/traverser/counter/CounterTraverser.java  |   2 +-
 .../mtree/traverser/counter/EntityCounter.java     |   2 +-
 .../mtree/traverser/counter/MNodeLevelCounter.java |   2 +-
 .../traverser/counter/MeasurementCounter.java      |   2 +-
 .../traverser/counter/StorageGroupCounter.java     |   2 +-
 .../apache/iotdb/db/metadata/path/AlignedPath.java | 227 +++++++++++++++++++++
 .../iotdb/db/metadata/path/MeasurementPath.java    | 125 ++++++++++++
 .../iotdb/db/metadata/{ => path}/PartialPath.java  |  85 ++++----
 .../apache/iotdb/db/metadata/tag/TagManager.java   |   2 +-
 .../iotdb/db/metadata/utils/MetaFormatUtils.java   |   2 +-
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |   2 +-
 .../org/apache/iotdb/db/monitor/StatMonitor.java   |   2 +-
 .../org/apache/iotdb/db/mqtt/PublishHandler.java   |   2 +-
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |   2 +-
 .../apache/iotdb/db/qp/executor/IPlanExecutor.java |   2 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |   2 +-
 .../qp/logical/crud/AggregationQueryOperator.java  |   2 +-
 .../db/qp/logical/crud/BasicFunctionOperator.java  |   2 +-
 .../db/qp/logical/crud/DeleteDataOperator.java     |   2 +-
 .../iotdb/db/qp/logical/crud/FilterOperator.java   |   2 +-
 .../iotdb/db/qp/logical/crud/FromComponent.java    |   2 +-
 .../iotdb/db/qp/logical/crud/InOperator.java       |   2 +-
 .../iotdb/db/qp/logical/crud/InsertOperator.java   |   2 +-
 .../iotdb/db/qp/logical/crud/LikeOperator.java     |   2 +-
 .../iotdb/db/qp/logical/crud/QueryOperator.java    |  10 +-
 .../iotdb/db/qp/logical/crud/RegexpOperator.java   |   2 +-
 .../iotdb/db/qp/logical/crud/SelectComponent.java  |   2 +-
 .../db/qp/logical/crud/SelectIntoOperator.java     |   2 +-
 .../db/qp/logical/sys/AlterTimeSeriesOperator.java |   2 +-
 .../iotdb/db/qp/logical/sys/AuthorOperator.java    |   2 +-
 .../iotdb/db/qp/logical/sys/CountOperator.java     |   2 +-
 .../logical/sys/CreateContinuousQueryOperator.java |   2 +-
 .../db/qp/logical/sys/CreateIndexOperator.java     |   2 +-
 .../qp/logical/sys/CreateTimeSeriesOperator.java   |   2 +-
 .../db/qp/logical/sys/CreateTriggerOperator.java   |   2 +-
 .../db/qp/logical/sys/DeletePartitionOperator.java |   2 +-
 .../qp/logical/sys/DeleteStorageGroupOperator.java |   2 +-
 .../qp/logical/sys/DeleteTimeSeriesOperator.java   |   2 +-
 .../iotdb/db/qp/logical/sys/DropIndexOperator.java |   2 +-
 .../iotdb/db/qp/logical/sys/FlushOperator.java     |   2 +-
 .../db/qp/logical/sys/SetStorageGroupOperator.java |   2 +-
 .../iotdb/db/qp/logical/sys/SetTTLOperator.java    |   2 +-
 .../iotdb/db/qp/logical/sys/SettleOperator.java    |   2 +-
 .../db/qp/logical/sys/ShowChildNodesOperator.java  |   2 +-
 .../db/qp/logical/sys/ShowChildPathsOperator.java  |   2 +-
 .../db/qp/logical/sys/ShowDevicesOperator.java     |   2 +-
 .../db/qp/logical/sys/ShowLockInfoOperator.java    |   2 +-
 .../qp/logical/sys/ShowStorageGroupOperator.java   |   2 +-
 .../iotdb/db/qp/logical/sys/ShowTTLOperator.java   |   2 +-
 .../db/qp/logical/sys/ShowTimeSeriesOperator.java  |   2 +-
 .../iotdb/db/qp/logical/sys/UnSetTTLOperator.java  |   2 +-
 .../org/apache/iotdb/db/qp/physical/BatchPlan.java |   2 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |   2 +-
 .../iotdb/db/qp/physical/crud/AggregationPlan.java |   2 +-
 .../db/qp/physical/crud/AlignByDevicePlan.java     |   2 +-
 .../db/qp/physical/crud/CreateTemplatePlan.java    |   2 +-
 .../db/qp/physical/crud/DeletePartitionPlan.java   |   2 +-
 .../iotdb/db/qp/physical/crud/DeletePlan.java      |   2 +-
 .../db/qp/physical/crud/InsertMultiTabletPlan.java |   2 +-
 .../iotdb/db/qp/physical/crud/InsertPlan.java      |   2 +-
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |   2 +-
 .../physical/crud/InsertRowsOfOneDevicePlan.java   |   2 +-
 .../iotdb/db/qp/physical/crud/InsertRowsPlan.java  |   2 +-
 .../db/qp/physical/crud/InsertTabletPlan.java      |   2 +-
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |   2 +-
 .../db/qp/physical/crud/RawDataQueryPlan.java      |   8 +-
 .../iotdb/db/qp/physical/crud/SelectIntoPlan.java  |   2 +-
 .../db/qp/physical/crud/SetSchemaTemplatePlan.java |   2 +-
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |   2 +-
 .../qp/physical/crud/UnsetSchemaTemplatePlan.java  |   2 +-
 .../db/qp/physical/sys/AlterTimeSeriesPlan.java    |   2 +-
 .../iotdb/db/qp/physical/sys/AuthorPlan.java       |   2 +-
 .../qp/physical/sys/AutoCreateDeviceMNodePlan.java |   2 +-
 .../iotdb/db/qp/physical/sys/ChangeAliasPlan.java  |   2 +-
 .../db/qp/physical/sys/ChangeTagOffsetPlan.java    |   2 +-
 .../iotdb/db/qp/physical/sys/ClearCachePlan.java   |   2 +-
 .../apache/iotdb/db/qp/physical/sys/CountPlan.java |   2 +-
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  |   2 +-
 .../qp/physical/sys/CreateContinuousQueryPlan.java |   2 +-
 .../db/qp/physical/sys/CreateFunctionPlan.java     |   2 +-
 .../iotdb/db/qp/physical/sys/CreateIndexPlan.java  |   2 +-
 .../qp/physical/sys/CreateMultiTimeSeriesPlan.java |   2 +-
 .../db/qp/physical/sys/CreateSnapshotPlan.java     |   2 +-
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   |   2 +-
 .../db/qp/physical/sys/CreateTriggerPlan.java      |   2 +-
 .../iotdb/db/qp/physical/sys/DataAuthPlan.java     |   2 +-
 .../db/qp/physical/sys/DeleteStorageGroupPlan.java |   2 +-
 .../db/qp/physical/sys/DeleteTimeSeriesPlan.java   |   2 +-
 .../qp/physical/sys/DropContinuousQueryPlan.java   |   2 +-
 .../iotdb/db/qp/physical/sys/DropFunctionPlan.java |   2 +-
 .../iotdb/db/qp/physical/sys/DropIndexPlan.java    |   2 +-
 .../iotdb/db/qp/physical/sys/DropTriggerPlan.java  |   2 +-
 .../apache/iotdb/db/qp/physical/sys/FlushPlan.java |   2 +-
 .../iotdb/db/qp/physical/sys/KillQueryPlan.java    |   2 +-
 .../db/qp/physical/sys/LoadConfigurationPlan.java  |   2 +-
 .../iotdb/db/qp/physical/sys/LoadDataPlan.java     |   2 +-
 .../apache/iotdb/db/qp/physical/sys/LogPlan.java   |   2 +-
 .../apache/iotdb/db/qp/physical/sys/MNodePlan.java |   2 +-
 .../db/qp/physical/sys/MeasurementMNodePlan.java   |   2 +-
 .../apache/iotdb/db/qp/physical/sys/MergePlan.java |   2 +-
 .../iotdb/db/qp/physical/sys/OperateFilePlan.java  |   2 +-
 .../db/qp/physical/sys/SetStorageGroupPlan.java    |   2 +-
 .../db/qp/physical/sys/SetSystemModePlan.java      |   2 +-
 .../iotdb/db/qp/physical/sys/SetTTLPlan.java       |   2 +-
 .../physical/sys/SetUsingSchemaTemplatePlan.java   |   2 +-
 .../iotdb/db/qp/physical/sys/SettlePlan.java       |   2 +-
 .../db/qp/physical/sys/ShowChildNodesPlan.java     |   2 +-
 .../db/qp/physical/sys/ShowChildPathsPlan.java     |   2 +-
 .../iotdb/db/qp/physical/sys/ShowDevicesPlan.java  |   2 +-
 .../iotdb/db/qp/physical/sys/ShowLockInfoPlan.java |   2 +-
 .../apache/iotdb/db/qp/physical/sys/ShowPlan.java  |   2 +-
 .../db/qp/physical/sys/ShowStorageGroupPlan.java   |   2 +-
 .../iotdb/db/qp/physical/sys/ShowTTLPlan.java      |   2 +-
 .../db/qp/physical/sys/ShowTimeSeriesPlan.java     |   2 +-
 .../iotdb/db/qp/physical/sys/StartTriggerPlan.java |   2 +-
 .../iotdb/db/qp/physical/sys/StopTriggerPlan.java  |   2 +-
 .../db/qp/physical/sys/StorageGroupMNodePlan.java  |   2 +-
 .../iotdb/db/qp/physical/sys/TracingPlan.java      |   2 +-
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    |   2 +-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |   2 +-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   4 +-
 .../qp/strategy/optimizer/ConcatPathOptimizer.java |   2 +-
 .../optimizer/MergeSingleFilterOptimizer.java      |   2 +-
 .../qp/strategy/optimizer/RemoveNotOptimizer.java  |   2 +-
 .../iotdb/db/qp/utils/GroupByLevelController.java  |   2 +-
 .../apache/iotdb/db/qp/utils/WildcardsRemover.java |   2 +-
 .../iotdb/db/query/context/QueryContext.java       |   2 +-
 .../db/query/control/QueryResourceManager.java     |   2 +-
 .../db/query/dataset/AlignByDeviceDataSet.java     |   6 +-
 .../apache/iotdb/db/query/dataset/ListDataSet.java |   2 +-
 .../db/query/dataset/NonAlignEngineDataSet.java    |   2 +-
 .../dataset/RawQueryDataSetWithValueFilter.java    |   2 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java |  16 +-
 .../query/dataset/ShowContinuousQueriesResult.java |   2 +-
 .../iotdb/db/query/dataset/ShowDevicesDataSet.java |   2 +-
 .../db/query/dataset/ShowTimeseriesDataSet.java    |   2 +-
 .../iotdb/db/query/dataset/SingleDataSet.java      |   2 +-
 .../apache/iotdb/db/query/dataset/UDTFDataSet.java |   2 +-
 .../query/dataset/groupby/GroupByFillDataSet.java  |   2 +-
 .../query/dataset/groupby/GroupByLevelDataSet.java |   2 +-
 .../groupby/GroupByWithValueFilterDataSet.java     |   2 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   2 +-
 .../dataset/groupby/LocalGroupByExecutor.java      |   2 +-
 .../db/query/executor/AggregationExecutor.java     |  20 +-
 .../iotdb/db/query/executor/FillQueryExecutor.java |   2 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java |   8 +-
 .../iotdb/db/query/executor/QueryRouter.java       |   2 +-
 .../db/query/executor/RawDataQueryExecutor.java    |   2 +-
 .../apache/iotdb/db/query/executor/fill/IFill.java |   2 +-
 .../db/query/executor/fill/LastPointReader.java    |   2 +-
 .../iotdb/db/query/executor/fill/LinearFill.java   |   2 +-
 .../iotdb/db/query/executor/fill/PreviousFill.java |   2 +-
 .../iotdb/db/query/executor/fill/ValueFill.java    |   2 +-
 .../iotdb/db/query/expression/Expression.java      |   2 +-
 .../iotdb/db/query/expression/ResultColumn.java    |   2 +-
 .../query/expression/binary/BinaryExpression.java  |   2 +-
 .../query/expression/unary/FunctionExpression.java |   2 +-
 .../query/expression/unary/NegationExpression.java |   2 +-
 .../query/expression/unary/TimeSeriesOperand.java  |   2 +-
 .../chunk/metadata/DiskChunkMetadataLoader.java    |   2 +-
 .../chunk/metadata/MemChunkMetadataLoader.java     |   2 +-
 ...rSeriesReader.java => AlignedSeriesReader.java} |  64 ++++--
 .../query/reader/series/SeriesAggregateReader.java |  14 +-
 .../reader/series/SeriesRawDataBatchReader.java    |  32 ++-
 .../iotdb/db/query/reader/series/SeriesReader.java |  32 +--
 .../reader/series/SeriesReaderByTimestamp.java     |   7 +-
 .../reader/series/VectorSeriesAggregateReader.java |   8 +-
 .../query/timegenerator/ServerTimeGenerator.java   |   2 +-
 .../api/customizer/parameter/UDFParameters.java    |   2 +-
 .../query/udf/core/layer/RawQueryInputLayer.java   |   2 +-
 .../org/apache/iotdb/db/service/SettleService.java |   2 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java |   2 +-
 .../apache/iotdb/db/tools/TsFileRewriteTool.java   |   2 +-
 .../org/apache/iotdb/db/tools/mlog/MLogParser.java |   2 +-
 .../db/tools/virtualsg/DeviceMappingViewer.java    |   2 +-
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |  13 +-
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |  49 ++---
 .../java/org/apache/iotdb/db/utils/MergeUtils.java |   2 +-
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |   2 +-
 .../iotdb/db/utils/datastructure/TVList.java       |   5 +-
 .../iotdb/db/utils/datastructure/VectorTVList.java |   6 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |   2 +-
 .../apache/iotdb/db/auth/AuthorityCheckerTest.java |   2 +-
 .../iotdb/db/engine/MetadataManagerHelper.java     |   2 +-
 .../iotdb/db/engine/cache/ChunkCacheTest.java      |   2 +-
 .../engine/compaction/CompactionSchedulerTest.java |   2 +-
 .../compaction/cross/CrossSpaceCompactionTest.java |   2 +-
 .../engine/compaction/cross/MergeOverLapTest.java  |   2 +-
 .../db/engine/compaction/cross/MergeTaskTest.java  |   2 +-
 .../db/engine/compaction/cross/MergeTest.java      |   2 +-
 .../inner/InnerCompactionMoreDataTest.java         |   2 +-
 .../compaction/inner/InnerCompactionTest.java      |   2 +-
 .../compaction/inner/InnerSeqCompactionTest.java   |   2 +-
 .../compaction/inner/InnerUnseqCompactionTest.java |   2 +-
 .../SizeTieredCompactionRecoverTest.java           |   2 +-
 .../inner/sizetiered/SizeTieredCompactionTest.java |   2 +-
 .../compaction/utils/CompactionCheckerUtils.java   |   2 +-
 .../utils/CompactionFileGeneratorUtils.java        |   2 +-
 .../db/engine/memtable/MemTableTestUtils.java      |   2 +-
 .../db/engine/memtable/PrimitiveMemTableTest.java  |   2 +-
 .../engine/modification/DeletionFileNodeTest.java  |   2 +-
 .../db/engine/modification/DeletionQueryTest.java  |   2 +-
 .../engine/modification/ModificationFileTest.java  |   2 +-
 .../io/LocalTextModificationAccessorTest.java      |   2 +-
 .../storagegroup/FileNodeManagerBenchmark.java     |   2 +-
 .../storagegroup/StorageGroupProcessorTest.java    |   2 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |   2 +-
 .../virtualSg/HashVirtualPartitionerTest.java      |   2 +-
 .../iotdb/db/integration/IoTDBArithmeticIT.java    |   2 +-
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |   2 +-
 .../iotdb/db/integration/IoTDBFilePathUtilsIT.java |   2 +-
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |   2 +-
 ...IoTDBLoadExternalTsFileWithTimePartitionIT.java |   2 +-
 .../db/integration/IoTDBLoadExternalTsfileIT.java  |   2 +-
 .../integration/IoTDBManageTsFileResourceIT.java   |   2 +-
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |   2 +-
 .../db/integration/IoTDBNewTsFileCompactionIT.java |   2 +-
 .../db/integration/IoTDBRemovePartitionIT.java     |   2 +-
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    |   2 +-
 .../db/integration/IoTDBSequenceDataQueryIT.java   |   2 +-
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |   2 +-
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   |   2 +-
 .../db/integration/IoTDBTriggerExecutionIT.java    |   2 +-
 .../db/integration/IoTDBTriggerManagementIT.java   |   2 +-
 .../iotdb/db/integration/IoTDBUDFManagementIT.java |   2 +-
 .../db/integration/IoTDBUDFWindowQueryIT.java      |   2 +-
 .../integration/IoTDBUDTFAlignByTimeQueryIT.java   |   2 +-
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java |   2 +-
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |   2 +-
 .../db/integration/IoTDBUDTFNonAlignQueryIT.java   |   2 +-
 .../iotdb/db/metadata/MManagerAdvancedTest.java    |   1 +
 .../iotdb/db/metadata/MManagerBasicTest.java       |  61 +++---
 .../iotdb/db/metadata/MManagerImproveTest.java     |   1 +
 .../org/apache/iotdb/db/metadata/MTreeTest.java    |   1 +
 .../apache/iotdb/db/metadata/PartialPathTest.java  |   1 +
 .../iotdb/db/metadata/mlog/MLogUpgraderTest.java   |   2 +-
 .../java/org/apache/iotdb/db/qp/PlannerTest.java   |   2 +-
 .../iotdb/db/qp/logical/LogicalPlanSmallTest.java  |   2 +-
 .../iotdb/db/qp/other/TSPlanContextAuthorTest.java |   2 +-
 .../iotdb/db/qp/physical/ConcatOptimizerTest.java  |   2 +-
 .../iotdb/db/qp/physical/InsertRowPlanTest.java    |   2 +-
 .../qp/physical/InsertRowsOfOneDevicePlanTest.java |   2 +-
 .../db/qp/physical/InsertTabletMultiPlanTest.java  |   2 +-
 .../iotdb/db/qp/physical/InsertTabletPlanTest.java |   8 +-
 .../db/qp/physical/PhysicalPlanSerializeTest.java  |   2 +-
 .../iotdb/db/qp/physical/PhysicalPlanTest.java     |   2 +-
 .../iotdb/db/qp/physical/SerializationTest.java    |   2 +-
 .../query/dataset/UDTFAlignByTimeDataSetTest.java  |   2 +-
 .../reader/series/SeriesAggregateReaderTest.java   |   2 +-
 .../reader/series/SeriesReaderByTimestampTest.java |   2 +-
 .../db/query/reader/series/SeriesReaderTest.java   |   2 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |   2 +-
 .../iotdb/db/rescon/ResourceManagerTest.java       |   2 +-
 .../org/apache/iotdb/db/sink/MQTTSinkTest.java     |   2 +-
 .../db/sync/receiver/load/FileLoaderTest.java      |   2 +-
 .../recover/SyncReceiverLogAnalyzerTest.java       |   2 +-
 .../db/sync/sender/manage/SyncFileManagerTest.java |   2 +-
 .../sender/recover/SyncSenderLogAnalyzerTest.java  |   2 +-
 .../org/apache/iotdb/db/tools/MLogParserTest.java  |   2 +-
 .../iotdb/db/tools/TsFileAndModSettleToolTest.java |   2 +-
 .../org/apache/iotdb/db/tools/WalCheckerTest.java  |   2 +-
 .../org/apache/iotdb/db/utils/MemUtilsTest.java    |   2 +-
 .../org/apache/iotdb/db/utils/SchemaUtilsTest.java |   2 +-
 .../iotdb/db/utils/TsFileRewriteToolTest.java      |   2 +-
 .../db/utils/datastructure/VectorTVListTest.java   |  21 +-
 .../apache/iotdb/db/writelog/PerformanceTest.java  |   2 +-
 .../iotdb/db/writelog/WriteLogNodeManagerTest.java |   2 +-
 .../apache/iotdb/db/writelog/WriteLogNodeTest.java |   2 +-
 .../iotdb/db/writelog/io/LogWriterReaderTest.java  |   2 +-
 .../db/writelog/io/MultiFileLogReaderTest.java     |   2 +-
 .../db/writelog/recover/DeviceStringTest.java      |   2 +-
 .../iotdb/db/writelog/recover/LogReplayerTest.java |   2 +-
 .../recover/RecoverResourceFromReaderTest.java     |   2 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |   2 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |   2 +-
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java |   2 +-
 401 files changed, 1173 insertions(+), 876 deletions(-)

diff --cc 
cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
index 9a35b61,902f827..fcdff7c
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
@@@ -560,7 -560,16 +560,15 @@@ public class ClusterReaderFactory 
      QueryDataSource queryDataSource =
          QueryResourceManager.getInstance().getQueryDataSource(path, context, 
timeFilter);
      valueFilter = queryDataSource.updateFilterUsingTTL(valueFilter);
-     return path.createSeriesReader(allSensors, dataType, context, 
queryDataSource, timeFilter, valueFilter, new SlotTsFileFilter(requiredSlots), 
ascending);
 -    return new SeriesReader(
 -        path,
++    return path.createSeriesReader(
+         allSensors,
+         dataType,
+         context,
+         queryDataSource,
+         timeFilter,
+         valueFilter,
+         new SlotTsFileFilter(requiredSlots),
+         ascending);
    }
  
    /**
diff --cc 
server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
index 0000000,ad7af21..88e1348
mode 000000,100644..100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
@@@ -1,0 -1,174 +1,227 @@@
+ /*
+  * 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.metadata.path;
+ 
++import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
++import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+ import org.apache.iotdb.db.exception.metadata.IllegalPathException;
++import org.apache.iotdb.db.query.context.QueryContext;
++import org.apache.iotdb.db.query.filter.TsFileFilter;
++import org.apache.iotdb.db.query.reader.series.AlignedSeriesReader;
++import org.apache.iotdb.db.utils.TestOnly;
+ import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
+ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
++import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
+ import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
+ 
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.List;
+ import java.util.Objects;
++import java.util.Set;
+ 
+ /**
+  * VectorPartialPath represents a vector's fullPath. It not only contains the 
full path of vector's
+  * own name, but also has subSensorsList which contain all the fullPath of 
vector's sub sensors.
+  * e.g. VectorPartialPath1(root.sg1.d1.vector1, [root.sg1.d1.vector1.s1, 
root.sg1.d1.vector1.s2])
+  * VectorPartialPath2(root.sg1.d1.vector2, [root.sg1.d1.vector2.s1, 
root.sg1.d1.vector2.s2])
+  */
+ public class AlignedPath extends PartialPath {
+ 
+   // todo improve vector implementation by remove this placeholder
+   private static final String VECTOR_PLACEHOLDER = "";
+ 
+   private List<String> measurementList;
+   private List<IMeasurementSchema> schemaList;
+ 
+   public AlignedPath() {}
+ 
+   public AlignedPath(String vectorPath, List<String> subSensorsList) throws 
IllegalPathException {
+     super(vectorPath);
+     this.measurementList = subSensorsList;
+   }
+ 
+   public AlignedPath(String vectorPath, String subSensor) throws 
IllegalPathException {
+     super(vectorPath);
+     measurementList = new ArrayList<>();
+     measurementList.add(subSensor);
+   }
+ 
+   public AlignedPath(PartialPath vectorPath, String subSensor) {
+     super(vectorPath.getNodes());
+     measurementList = new ArrayList<>();
+     measurementList.add(subSensor);
+   }
+ 
+   public AlignedPath(MeasurementPath path) {
+     super(path.getDevicePath().getNodes());
+     measurementList = new ArrayList<>();
+     measurementList.add(path.getMeasurement());
+     schemaList = new ArrayList<>();
+     schemaList.add(path.getMeasurementSchema());
+   }
+ 
+   public List<String> getMeasurementList() {
+     return measurementList;
+   }
+ 
+   public String getMeasurement(int index) {
+     return measurementList.get(index);
+   }
+ 
+   public PartialPath getPathWithMeasurement(int index) {
+     return new PartialPath(nodes).concatNode(measurementList.get(index));
+   }
+ 
+   public void setMeasurementList(List<String> measurementList) {
+     this.measurementList = measurementList;
+   }
+ 
+   public void addMeasurement(String subSensor) {
+     this.measurementList.add(subSensor);
+   }
+ 
+   public void addMeasurement(List<String> subSensors) {
+     this.measurementList.addAll(subSensors);
+   }
+ 
+   public void addMeasurement(List<String> measurementList, 
List<IMeasurementSchema> schemaList) {
+     this.measurementList.addAll(measurementList);
+     if (schemaList == null) {
+       schemaList = new ArrayList<>();
+     }
+     this.schemaList.addAll(schemaList);
+   }
+ 
+   public List<IMeasurementSchema> getSchemaList() {
+     return this.schemaList == null ? Collections.emptyList() : 
this.schemaList;
+   }
+ 
+   public VectorMeasurementSchema getMeasurementSchema() {
+     TSDataType[] types = new TSDataType[measurementList.size()];
+     TSEncoding[] encodings = new TSEncoding[measurementList.size()];
+ 
+     for (int i = 0; i < measurementList.size(); i++) {
+       types[i] = schemaList.get(i).getType();
+       encodings[i] = schemaList.get(i).getEncodingType();
+     }
+     String[] array = new String[measurementList.size()];
+     for (int i = 0; i < array.length; i++) {
+       array[i] = measurementList.get(i);
+     }
+     return new VectorMeasurementSchema(
+         VECTOR_PLACEHOLDER, array, types, encodings, 
schemaList.get(0).getCompressor());
+   }
+ 
+   @Override
+   public PartialPath copy() {
+     AlignedPath result = new AlignedPath();
+     result.nodes = nodes;
+     result.fullPath = fullPath;
+     result.device = device;
+     result.measurementList = new ArrayList<>(measurementList);
+     return result;
+   }
+ 
+   @Override
+   public boolean equals(Object o) {
+     if (this == o) {
+       return true;
+     }
+     if (o == null || getClass() != o.getClass()) {
+       return false;
+     }
+     if (!super.equals(o)) {
+       return false;
+     }
+     AlignedPath that = (AlignedPath) o;
+     return Objects.equals(measurementList, that.measurementList);
+   }
+ 
+   @Override
+   public int hashCode() {
+     return Objects.hash(super.hashCode(), measurementList);
+   }
+ 
+   @Override
+   public PartialPath getExactPath() {
+     PartialPath path = super.getExactPath();
+     if (measurementList.size() == 1) {
+       return path.concatNode(measurementList.get(0));
+     }
+     return path;
+   }
+ 
+   @Override
+   public String getExactFullPath() {
+     fullPath = getFullPath();
+     if (measurementList.size() == 1) {
+       return fullPath + TsFileConstant.PATH_SEPARATOR + 
measurementList.get(0);
+     }
+     return fullPath;
+   }
++
++  @Override
++  public AlignedSeriesReader createSeriesReader(
++      Set<String> allSensors,
++      TSDataType dataType,
++      QueryContext context,
++      QueryDataSource dataSource,
++      Filter timeFilter,
++      Filter valueFilter,
++      TsFileFilter fileFilter,
++      boolean ascending) {
++    return new AlignedSeriesReader(
++        this,
++        allSensors,
++        dataType,
++        context,
++        dataSource,
++        timeFilter,
++        valueFilter,
++        fileFilter,
++        ascending);
++  }
++
++  @Override
++  @TestOnly
++  public AlignedSeriesReader createSeriesReader(
++      Set<String> allSensors,
++      TSDataType dataType,
++      QueryContext context,
++      List<TsFileResource> seqFileResource,
++      List<TsFileResource> unseqFileResource,
++      Filter timeFilter,
++      Filter valueFilter,
++      boolean ascending) {
++    return new AlignedSeriesReader(
++        this,
++        allSensors,
++        dataType,
++        context,
++        seqFileResource,
++        unseqFileResource,
++        timeFilter,
++        valueFilter,
++        ascending);
++  }
+ }
diff --cc 
server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
index 0000000,5562da7..a8ea436
mode 000000,100644..100644
--- 
a/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
@@@ -1,0 -1,71 +1,125 @@@
+ /*
+  * 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.metadata.path;
+ 
+ import org.apache.iotdb.db.conf.IoTDBConstant;
++import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
++import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
++import org.apache.iotdb.db.query.context.QueryContext;
++import org.apache.iotdb.db.query.filter.TsFileFilter;
++import org.apache.iotdb.db.query.reader.series.SeriesReader;
++import org.apache.iotdb.db.utils.TestOnly;
++import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
++import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
+ 
++import java.util.List;
++import java.util.Set;
++
+ public class MeasurementPath extends PartialPath {
+ 
+   private IMeasurementSchema measurementSchema;
+   // alias of measurement, null pointer cannot be serialized in thrift so 
empty string is instead
+   private String measurementAlias = "";
+ 
+   public MeasurementPath() {}
+ 
+   public MeasurementPath(PartialPath measurementPath) {
+     super(measurementPath.getNodes());
+   }
+ 
+   public IMeasurementSchema getMeasurementSchema() {
+     return measurementSchema;
+   }
+ 
+   public void setMeasurementSchema(IMeasurementSchema measurementSchema) {
+     this.measurementSchema = measurementSchema;
+   }
+ 
+   public String getMeasurementAlias() {
+     return measurementAlias;
+   }
+ 
+   public void setMeasurementAlias(String measurementAlias) {
+     if (measurementAlias != null) {
+       this.measurementAlias = measurementAlias;
+     }
+   }
+ 
+   public boolean isMeasurementAliasExists() {
+     return measurementAlias != null && !measurementAlias.isEmpty();
+   }
+ 
+   @Override
+   public String getFullPathWithAlias() {
+     return getDevice() + IoTDBConstant.PATH_SEPARATOR + measurementAlias;
+   }
+ 
+   public PartialPath copy() {
+     MeasurementPath result = new MeasurementPath();
+     result.nodes = nodes;
+     result.fullPath = fullPath;
+     result.device = device;
+     result.measurementAlias = measurementAlias;
+     return result;
+   }
++
++  public SeriesReader createSeriesReader(
++      Set<String> allSensors,
++      TSDataType dataType,
++      QueryContext context,
++      QueryDataSource dataSource,
++      Filter timeFilter,
++      Filter valueFilter,
++      TsFileFilter fileFilter,
++      boolean ascending) {
++    return new SeriesReader(
++        this,
++        allSensors,
++        dataType,
++        context,
++        dataSource,
++        timeFilter,
++        valueFilter,
++        fileFilter,
++        ascending);
++  }
++
++  @TestOnly
++  public SeriesReader createSeriesReader(
++      Set<String> allSensors,
++      TSDataType dataType,
++      QueryContext context,
++      List<TsFileResource> seqFileResource,
++      List<TsFileResource> unseqFileResource,
++      Filter timeFilter,
++      Filter valueFilter,
++      boolean ascending) {
++    return new SeriesReader(
++        this,
++        allSensors,
++        dataType,
++        context,
++        seqFileResource,
++        unseqFileResource,
++        timeFilter,
++        valueFilter,
++        ascending);
++  }
+ }
diff --cc 
server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
index b4cf014,cc033b1..e4420af
mode 100755,100644..100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
@@@ -16,33 -16,28 +16,36 @@@
   * specific language governing permissions and limitations
   * under the License.
   */
- package org.apache.iotdb.db.metadata;
+ package org.apache.iotdb.db.metadata.path;
  
- import static 
org.apache.iotdb.db.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
- import static org.apache.iotdb.db.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
- 
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.Set;
- import java.util.regex.Pattern;
- import org.apache.iotdb.db.conf.IoTDBConstant;
 +import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 +import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
  import org.apache.iotdb.db.exception.metadata.IllegalPathException;
+ import org.apache.iotdb.db.exception.metadata.MetadataException;
  import org.apache.iotdb.db.metadata.utils.MetaUtils;
 +import org.apache.iotdb.db.query.context.QueryContext;
 +import org.apache.iotdb.db.query.filter.TsFileFilter;
 +import org.apache.iotdb.db.query.reader.series.SeriesReader;
  import org.apache.iotdb.db.utils.TestOnly;
  import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
  import org.apache.iotdb.tsfile.read.common.Path;
 +import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
+ 
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.List;
++import java.util.Set;
+ import java.util.regex.Pattern;
+ 
+ import static 
org.apache.iotdb.db.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
+ import static org.apache.iotdb.db.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
+ 
  /**
   * A prefix path, suffix path or fullPath generated from SQL. Usually used in 
the IoTDB server
   * module
@@@ -52,12 -47,8 +55,9 @@@ public class PartialPath extends Path i
    private static final Logger logger = 
LoggerFactory.getLogger(PartialPath.class);
  
    protected String[] nodes;
-   // alias of measurement, null pointer cannot be serialized in thrift so 
empty string is instead
-   protected String measurementAlias = "";
  
-   public PartialPath() {
-   }
+   public PartialPath() {}
 +
    /**
     * Construct the PartialPath using a String, will split the given String 
into String[] E.g., path
     * = "root.sg.\"d.1\".\"s.1\"" nodes = {"root", "sg", "\"d.1\"", "\"s.1\""}
@@@ -368,37 -370,4 +379,29 @@@
    public String getExactFullPath() {
      return getFullPath();
    }
 +
-   public SeriesReader createSeriesReader(Set<String> allSensors,
++  public SeriesReader createSeriesReader(
++      Set<String> allSensors,
 +      TSDataType dataType,
 +      QueryContext context,
 +      QueryDataSource dataSource,
 +      Filter timeFilter,
 +      Filter valueFilter,
 +      TsFileFilter fileFilter,
 +      boolean ascending) {
-     return new SeriesReader(
-         this,
-         allSensors,
-         dataType,
-         context,
-         dataSource,
-         timeFilter,
-         valueFilter,
-         fileFilter,
-         ascending);
++    throw new UnsupportedOperationException("Should call exact sub class");
 +  }
 +
 +  @TestOnly
-   public SeriesReader createSeriesReader(Set<String> allSensors,
++  public SeriesReader createSeriesReader(
++      Set<String> allSensors,
 +      TSDataType dataType,
 +      QueryContext context,
 +      List<TsFileResource> seqFileResource,
 +      List<TsFileResource> unseqFileResource,
 +      Filter timeFilter,
 +      Filter valueFilter,
 +      boolean ascending) {
-     return new SeriesReader(this, allSensors, dataType, context, 
seqFileResource, unseqFileResource,
-         timeFilter, valueFilter, ascending);
++    throw new UnsupportedOperationException("Should call exact sub class");
 +  }
  }
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
index db47258,0000000..4b91a0f
mode 100644,000000..100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
@@@ -1,65 -1,0 +1,95 @@@
 +/*
 + * 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.query.reader.series;
 +
- import java.io.IOException;
- import java.util.List;
- import java.util.Set;
 +import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 +import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
- import org.apache.iotdb.db.metadata.PartialPath;
- import org.apache.iotdb.db.metadata.VectorPartialPath;
++import org.apache.iotdb.db.metadata.path.AlignedPath;
++import org.apache.iotdb.db.metadata.path.PartialPath;
 +import org.apache.iotdb.db.query.context.QueryContext;
 +import org.apache.iotdb.db.query.filter.TsFileFilter;
 +import org.apache.iotdb.db.utils.FileLoaderUtils;
++import org.apache.iotdb.db.utils.TestOnly;
 +import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
 +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 +import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 +
- public class VectorSeriesReader extends SeriesReader {
++import java.io.IOException;
++import java.util.List;
++import java.util.Set;
++
++public class AlignedSeriesReader extends SeriesReader {
 +
-   public VectorSeriesReader(PartialPath seriesPath,
++  public AlignedSeriesReader(
++      PartialPath seriesPath,
 +      Set<String> allSensors,
 +      TSDataType dataType,
 +      QueryContext context,
 +      QueryDataSource dataSource,
 +      Filter timeFilter,
 +      Filter valueFilter,
-       TsFileFilter fileFilter, boolean ascending) {
-     super(seriesPath, allSensors, dataType, context, dataSource, timeFilter, 
valueFilter,
++      TsFileFilter fileFilter,
++      boolean ascending) {
++    super(
++        seriesPath,
++        allSensors,
++        dataType,
++        context,
++        dataSource,
++        timeFilter,
++        valueFilter,
 +        fileFilter,
 +        ascending);
 +  }
 +
-   public VectorSeriesReader(PartialPath seriesPath, Set<String> allSensors,
-       TSDataType dataType, QueryContext context,
++  @TestOnly
++  public AlignedSeriesReader(
++      PartialPath seriesPath,
++      Set<String> allSensors,
++      TSDataType dataType,
++      QueryContext context,
 +      List<TsFileResource> seqFileResource,
 +      List<TsFileResource> unseqFileResource,
-       Filter timeFilter, Filter valueFilter, boolean ascending) {
-     super(seriesPath, allSensors, dataType, context, seqFileResource, 
unseqFileResource, timeFilter,
-         valueFilter, ascending);
++      Filter timeFilter,
++      Filter valueFilter,
++      boolean ascending) {
++    super(
++        seriesPath,
++        allSensors,
++        dataType,
++        context,
++        seqFileResource,
++        unseqFileResource,
++        timeFilter,
++        valueFilter,
++        ascending);
 +  }
 +
 +  @Override
-   protected ITimeSeriesMetadata loadTimeSeriesMetadata(TsFileResource 
resource,
-       PartialPath seriesPath, QueryContext context, Filter filter, 
Set<String> allSensors)
++  protected ITimeSeriesMetadata loadTimeSeriesMetadata(
++      TsFileResource resource,
++      PartialPath seriesPath,
++      QueryContext context,
++      Filter filter,
++      Set<String> allSensors)
 +      throws IOException {
-     return FileLoaderUtils.loadTimeSeriesMetadata(resource, 
(VectorPartialPath) seriesPath, context, filter, allSensors);
++    return FileLoaderUtils.loadTimeSeriesMetadata(
++        resource, (AlignedPath) seriesPath, context, filter, allSensors);
 +  }
 +}
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
index 91f161f,f3f64bd..b1fc057
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
@@@ -44,8 -44,17 +44,16 @@@ public class SeriesAggregateReader impl
        Filter valueFilter,
        TsFileFilter fileFilter,
        boolean ascending) {
-     this.seriesReader = seriesPath.createSeriesReader(allSensors, dataType, 
context, dataSource,
-         timeFilter, valueFilter, fileFilter, ascending);
+     this.seriesReader =
 -        new SeriesReader(
 -            seriesPath,
++        seriesPath.createSeriesReader(
+             allSensors,
+             dataType,
+             context,
+             dataSource,
+             timeFilter,
+             valueFilter,
+             fileFilter,
+             ascending);
    }
  
    @Override
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
index c944ca4,2035747..c2f1c90
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
@@@ -57,8 -57,17 +57,16 @@@ public class SeriesRawDataBatchReader i
        Filter valueFilter,
        TsFileFilter fileFilter,
        boolean ascending) {
-     this.seriesReader = seriesPath.createSeriesReader(allSensors, dataType, 
context, dataSource,
-         timeFilter, valueFilter, fileFilter, ascending);
+     this.seriesReader =
 -        new SeriesReader(
 -            seriesPath,
++        seriesPath.createSeriesReader(
+             allSensors,
+             dataType,
+             context,
+             dataSource,
+             timeFilter,
+             valueFilter,
+             fileFilter,
+             ascending);
    }
  
    @TestOnly
@@@ -74,14 -83,17 +82,16 @@@
        boolean ascending) {
      Set<String> allSensors = new HashSet<>();
      allSensors.add(seriesPath.getMeasurement());
-     this.seriesReader = seriesPath.createSeriesReader(allSensors,
-         dataType,
-         context,
-         seqFileResource,
-         unseqFileResource,
-         timeFilter,
-         valueFilter,
-         ascending);
+     this.seriesReader =
 -        new SeriesReader(
 -            seriesPath,
++        seriesPath.createSeriesReader(
+             allSensors,
+             dataType,
+             context,
+             seqFileResource,
+             unseqFileResource,
+             timeFilter,
+             valueFilter,
+             ascending);
    }
  
    /**
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
index 16a508c,f03f7f1..5dda91a
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
@@@ -18,19 -18,11 +18,9 @@@
   */
  package org.apache.iotdb.db.query.reader.series;
  
- import java.io.IOException;
- import java.io.Serializable;
- import java.util.Comparator;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Objects;
- import java.util.PriorityQueue;
- import java.util.Set;
- import java.util.function.ToLongFunction;
- import java.util.stream.Collectors;
 -import org.apache.iotdb.db.conf.IoTDBConfig;
 -import org.apache.iotdb.db.conf.IoTDBDescriptor;
  import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
  import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
- import org.apache.iotdb.db.metadata.PartialPath;
+ import org.apache.iotdb.db.metadata.path.PartialPath;
  import org.apache.iotdb.db.query.context.QueryContext;
  import org.apache.iotdb.db.query.control.QueryTimeManager;
  import org.apache.iotdb.db.query.control.tracing.TracingManager;
@@@ -55,8 -47,20 +45,19 @@@ import org.apache.iotdb.tsfile.read.fil
  import org.apache.iotdb.tsfile.read.reader.IPageReader;
  import org.apache.iotdb.tsfile.read.reader.page.VectorPageReader;
  
+ import java.io.IOException;
+ import java.io.Serializable;
+ import java.util.Comparator;
+ import java.util.LinkedList;
+ import java.util.List;
+ import java.util.Objects;
+ import java.util.PriorityQueue;
+ import java.util.Set;
+ import java.util.function.ToLongFunction;
+ import java.util.stream.Collectors;
+ 
  public class SeriesReader {
  
 -  private static final IoTDBConfig CONFIG = 
IoTDBDescriptor.getInstance().getConfig();
    // inner class of SeriesReader for order purpose
    protected TimeOrderUtils orderUtils;
  
@@@ -1033,14 -1037,6 +1034,17 @@@
      }
    }
  
-   protected ITimeSeriesMetadata loadTimeSeriesMetadata(TsFileResource 
resource,
++  protected ITimeSeriesMetadata loadTimeSeriesMetadata(
++      TsFileResource resource,
 +      PartialPath seriesPath,
 +      QueryContext context,
 +      Filter filter,
-       Set<String> allSensors) throws IOException {
-     return FileLoaderUtils.loadTimeSeriesMetadata(resource, seriesPath, 
context, filter, allSensors);
++      Set<String> allSensors)
++      throws IOException {
++    return FileLoaderUtils.loadTimeSeriesMetadata(
++        resource, seriesPath, context, filter, allSensors);
 +  }
 +
    protected Filter getAnyFilter() {
      return timeFilter != null ? timeFilter : valueFilter;
    }
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
index bd68bed,198454c..70506e9
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
@@@ -47,8 -47,17 +47,9 @@@ public class SeriesReaderByTimestamp im
        boolean ascending) {
      UnaryFilter timeFilter =
          ascending ? TimeFilter.gtEq(Long.MIN_VALUE) : 
TimeFilter.ltEq(Long.MAX_VALUE);
-     this.seriesReader = seriesPath.createSeriesReader(allSensors, dataType, 
context, dataSource,
-         timeFilter, null, fileFilter, ascending);
+     this.seriesReader =
 -        new SeriesReader(
 -            seriesPath,
 -            allSensors,
 -            dataType,
 -            context,
 -            dataSource,
 -            timeFilter,
 -            null,
 -            fileFilter,
 -            ascending);
++        seriesPath.createSeriesReader(
++            allSensors, dataType, context, dataSource, timeFilter, null, 
fileFilter, ascending);
      this.ascending = ascending;
    }
  
diff --cc 
server/src/main/java/org/apache/iotdb/db/query/reader/series/VectorSeriesAggregateReader.java
index 8db2bd2,c8320ae..29cb347
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/VectorSeriesAggregateReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/VectorSeriesAggregateReader.java
@@@ -53,7 -53,7 +53,7 @@@ public class VectorSeriesAggregateReade
        TsFileFilter fileFilter,
        boolean ascending) {
      this.seriesReader =
-         new VectorSeriesReader(
 -        new SeriesReader(
++        new AlignedSeriesReader(
              seriesPath,
              allSensors,
              dataType,
diff --cc server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
index 9626991,9755b52..0a28ab6
--- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
@@@ -154,9 -159,9 +154,9 @@@ public class FileLoaderUtils 
     *     [root.sg1.d1.vector.s1, root.sg1.d1.vector.s2])
     * @param allSensors all sensors belonging to this device that appear in 
query
     */
 -  private static VectorTimeSeriesMetadata loadVectorTimeSeriesMetadata(
 +  public static VectorTimeSeriesMetadata loadTimeSeriesMetadata(
        TsFileResource resource,
-       VectorPartialPath vectorPath,
+       AlignedPath vectorPath,
        QueryContext context,
        Filter filter,
        Set<String> allSensors)

Reply via email to