This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch AlignedSeriesScanOperator in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 32982622f75552811cf8b2e817b1f1b248f7919b Merge: dcbdecbca5 b090698af2 Author: JackieTien97 <[email protected]> AuthorDate: Wed May 4 16:56:19 2022 +0800 resolve conflicts and add desc test README.md | 14 + README_ZH.md | 13 + .../cluster/client/sync/SyncClientAdaptor.java | 2 +- .../iotdb/cluster/coordinator/Coordinator.java | 6 +- .../cluster/log/applier/AsyncDataLogApplier.java | 4 +- .../iotdb/cluster/log/applier/BaseApplier.java | 4 +- .../iotdb/cluster/log/applier/DataLogApplier.java | 2 +- .../cluster/log/logtypes/PhysicalPlanLog.java | 2 +- .../manage/FilePartitionedSnapshotLogManager.java | 2 +- .../log/manage/MetaSingleSnapshotLogManager.java | 2 +- .../log/manage/PartitionedSnapshotLogManager.java | 2 +- .../iotdb/cluster/log/snapshot/FileSnapshot.java | 4 +- .../cluster/log/snapshot/MetaSimpleSnapshot.java | 6 +- .../iotdb/cluster/metadata/CSchemaProcessor.java | 6 +- .../apache/iotdb/cluster/metadata/MetaPuller.java | 4 +- .../iotdb/cluster/partition/PartitionTable.java | 4 +- .../cluster/query/ClusterDataQueryExecutor.java | 2 +- .../cluster/query/ClusterPhysicalGenerator.java | 4 +- .../iotdb/cluster/query/ClusterPlanExecutor.java | 4 +- .../iotdb/cluster/query/ClusterPlanRouter.java | 4 +- .../iotdb/cluster/query/LocalQueryExecutor.java | 6 +- .../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 | 2 +- .../cluster/query/reader/ClusterTimeGenerator.java | 2 +- .../query/reader/mult/MultDataSourceInfo.java | 2 +- .../handlers/caller/ShowTimeSeriesHandler.java | 4 +- .../cluster/server/member/DataGroupMember.java | 6 +- .../cluster/server/member/MetaGroupMember.java | 4 +- .../iotdb/cluster/server/member/RaftMember.java | 2 +- .../cluster/server/service/DataAsyncService.java | 4 +- .../cluster/server/service/DataSyncService.java | 4 +- .../iotdb/cluster/utils/ClusterQueryUtils.java | 6 +- .../apache/iotdb/cluster/utils/ClusterUtils.java | 4 +- .../cluster/utils/nodetool/ClusterMonitor.java | 4 +- .../cluster/client/sync/SyncClientAdaptorTest.java | 4 +- .../org/apache/iotdb/cluster/common/IoTDBTest.java | 6 +- .../iotdb/cluster/common/TestAsyncDataClient.java | 2 +- .../iotdb/cluster/common/TestLogApplier.java | 4 +- .../org/apache/iotdb/cluster/common/TestUtils.java | 4 +- .../apache/iotdb/cluster/log/LogParserTest.java | 4 +- .../log/applier/AsyncDataLogApplierTest.java | 4 +- .../cluster/log/applier/DataLogApplierTest.java | 6 +- .../cluster/log/applier/MetaLogApplierTest.java | 4 +- .../cluster/log/logtypes/SerializeLogTest.java | 4 +- .../FilePartitionedSnapshotLogManagerTest.java | 2 +- .../manage/MetaSingleSnapshotLogManagerTest.java | 4 +- .../cluster/log/snapshot/DataSnapshotTest.java | 4 +- .../cluster/log/snapshot/FileSnapshotTest.java | 4 +- .../log/snapshot/MetaSimpleSnapshotTest.java | 4 +- .../log/snapshot/PartitionedSnapshotTest.java | 4 +- .../cluster/log/snapshot/PullSnapshotTaskTest.java | 6 +- .../cluster/partition/SlotPartitionTableTest.java | 6 +- .../apache/iotdb/cluster/query/BaseQueryTest.java | 2 +- .../query/ClusterAggregateExecutorTest.java | 4 +- .../query/ClusterDataQueryExecutorTest.java | 4 +- .../query/ClusterPhysicalGeneratorTest.java | 4 +- .../cluster/query/ClusterPlanExecutorTest.java | 4 +- .../cluster/query/ClusterQueryRouterTest.java | 4 +- .../query/fill/ClusterFillExecutorTest.java | 2 +- .../ClusterGroupByNoVFilterDataSetTest.java | 4 +- .../groupby/ClusterGroupByVFilterDataSetTest.java | 4 +- .../query/groupby/MergeGroupByExecutorTest.java | 4 +- .../query/groupby/RemoteGroupByExecutorTest.java | 4 +- .../query/last/ClusterLastQueryExecutorTest.java | 2 +- .../query/reader/ClusterReaderFactoryTest.java | 4 +- .../query/reader/ClusterTimeGeneratorTest.java | 4 +- .../mult/AssignPathManagedMergeReaderTest.java | 4 +- .../mult/MultSeriesRawDataPointReaderTest.java | 2 +- .../reader/mult/RemoteMultSeriesReaderTest.java | 4 +- .../server/clusterinfo/ClusterInfoServerTest.java | 2 +- .../clusterinfo/ClusterInfoServiceImplTest.java | 4 +- .../handlers/forwarder/ForwardPlanHandlerTest.java | 4 +- .../iotdb/cluster/server/member/BaseMember.java | 4 +- .../cluster/server/member/DataGroupMemberTest.java | 4 +- .../cluster/server/member/MetaGroupMemberTest.java | 6 +- .../iotdb/cluster/utils/SerializeUtilTest.java | 4 +- .../confignode/persistence/ClusterSchemaInfo.java | 6 +- .../thrift/ConfigNodeRPCServiceProcessorTest.java | 4 +- .../iotdb/consensus/ratis/RatisConsensus.java | 75 +++-- docs/Development/ContributeGuide.md | 18 +- .../Administration-Management/Administration.md | 2 +- docs/UserGuide/Process-Data/Triggers.md | 2 +- .../Administration-Management/Administration.md | 2 +- docs/zh/UserGuide/Process-Data/Triggers.md | 2 +- .../org/apache/iotdb/trigger/TriggerExample.java | 2 +- .../iotdb/db/integration/IoTDBArithmeticIT.java | 4 +- .../iotdb/db/integration/IoTDBAuthorizationIT.java | 32 ++- .../db/integration/IoTDBContinuousQueryIT.java | 4 +- .../db/integration/IoTDBEngineTimeGeneratorIT.java | 4 +- .../iotdb/db/integration/IoTDBFilePathUtilsIT.java | 4 +- .../apache/iotdb/db/integration/IoTDBLastIT.java | 2 +- ...IoTDBLoadExternalTsFileWithTimePartitionIT.java | 4 +- .../db/integration/IoTDBLoadExternalTsfileIT.java | 4 +- .../integration/IoTDBManageTsFileResourceIT.java | 4 +- .../iotdb/db/integration/IoTDBNestedQueryIT.java | 33 ++- .../db/integration/IoTDBNewTsFileCompactionIT.java | 2 +- .../db/integration/IoTDBRemovePartitionIT.java | 4 +- .../iotdb/db/integration/IoTDBSelectIntoIT.java | 4 +- .../db/integration/IoTDBSequenceDataQueryIT.java | 4 +- .../iotdb/db/integration/IoTDBSeriesReaderIT.java | 4 +- .../iotdb/db/integration/IoTDBSimpleQueryIT.java | 4 +- .../db/integration/IoTDBTriggerExecutionIT.java | 4 +- .../db/integration/IoTDBTriggerManagementIT.java | 2 +- .../iotdb/db/integration/IoTDBUDFManagementIT.java | 2 +- .../aligned/IoTDBLoadExternalAlignedTsFileIT.java | 4 +- .../sync/IoTDBSyncReceiverCollectorIT.java | 2 +- .../db/integration/sync/IoTDBSyncReceiverIT.java | 2 +- .../sync/IoTDBSyncReceiverLoaderIT.java | 2 +- .../db/integration/sync/IoTDBSyncSenderIT.java | 2 +- .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 4 +- .../apache/iotdb/session/template/TemplateUT.java | 2 +- node-commons/pom.xml | 10 + .../commons/exception}/IllegalPathException.java | 2 +- .../commons/exception}/MetadataException.java | 3 +- .../apache/iotdb/commons}/path/PartialPath.java | 12 +- .../org/apache/iotdb/commons/path/PathType.java | 20 +- .../org/apache/iotdb/commons/utils/PathUtils.java | 98 +++++++ pom.xml | 13 +- .../rocksdb/RSchemaReadWriteHandler.java | 4 +- .../schemaregion/rocksdb/RSchemaRegion.java | 10 +- .../schemaregion/rocksdb/RSchemaUtils.java | 8 +- .../schemaregion/rocksdb/mnode/REntityMNode.java | 2 +- .../schemaregion/rocksdb/mnode/RInternalMNode.java | 2 +- .../schemaregion/rocksdb/mnode/RMNode.java | 6 +- .../rocksdb/mnode/RMeasurementMNode.java | 2 +- .../rocksdb/mnode/RStorageGroupMNode.java | 2 +- .../org/apache/iotdb/db/auth/AuthorityChecker.java | 2 +- .../iotdb/db/auth/authorizer/BasicAuthorizer.java | 14 + .../org/apache/iotdb/db/engine/StorageEngine.java | 6 +- .../apache/iotdb/db/engine/StorageEngineV2.java | 2 +- .../RewriteCrossSpaceCompactionResource.java | 2 +- .../rewrite/task/ReadPointPerformerSubTask.java | 2 +- .../inner/utils/MultiTsFileDeviceIterator.java | 4 +- .../utils/SingleSeriesCompactionExecutor.java | 2 +- .../compaction/performer/ICompactionPerformer.java | 2 +- .../impl/ReadChunkCompactionPerformer.java | 4 +- .../impl/ReadPointCompactionPerformer.java | 6 +- .../engine/cq/ContinuousQuerySchemaCheckTask.java | 4 +- .../iotdb/db/engine/cq/ContinuousQueryTask.java | 6 +- .../iotdb/db/engine/memtable/AbstractMemTable.java | 2 +- .../memtable/AlignedWritableMemChunkGroup.java | 2 +- .../apache/iotdb/db/engine/memtable/IMemTable.java | 4 +- .../db/engine/memtable/IWritableMemChunkGroup.java | 2 +- .../db/engine/memtable/WritableMemChunkGroup.java | 2 +- .../iotdb/db/engine/modification/Deletion.java | 4 +- .../iotdb/db/engine/modification/Modification.java | 2 +- .../io/LocalTextModificationAccessor.java | 4 +- .../selectinto/InsertTabletPlanGenerator.java | 4 +- .../selectinto/InsertTabletPlansIterator.java | 4 +- .../apache/iotdb/db/engine/settle/SettleTask.java | 2 +- .../iotdb/db/engine/storagegroup/DataRegion.java | 6 +- .../db/engine/storagegroup/TsFileProcessor.java | 6 +- .../db/engine/storagegroup/TsFileResource.java | 2 +- .../dataregion/HashVirtualPartitioner.java | 2 +- .../dataregion/StorageGroupManager.java | 2 +- .../dataregion/VirtualPartitioner.java | 2 +- .../service/TriggerRegistrationInformation.java | 2 +- .../service/TriggerRegistrationService.java | 4 +- .../sink/local/LocalIoTDBConfiguration.java | 4 +- .../trigger/sink/local/LocalIoTDBHandler.java | 4 +- .../trigger/sink/mqtt/MQTTConfiguration.java | 2 +- .../metadata/AcquireLockTimeoutException.java | 2 + .../metadata/AliasAlreadyExistException.java | 1 + .../metadata/AlignedTimeseriesException.java | 1 + .../metadata/DataTypeMismatchException.java | 1 + .../exception/metadata/DeleteFailedException.java | 1 + .../metadata/IllegalParameterOfPathException.java | 1 + .../metadata/MNodeTypeMismatchException.java | 1 + .../metadata/PathAlreadyExistException.java | 1 + .../exception/metadata/PathNotExistException.java | 1 + .../SchemaDirCreationFailureException.java | 2 + .../metadata/SeriesOverflowException.java | 1 + .../metadata/StorageGroupAlreadySetException.java | 1 + .../metadata/StorageGroupNotSetException.java | 1 + .../metadata/cache/MNodeNotCachedException.java | 2 +- .../metadata/cache/MNodeNotPinnedException.java | 2 +- .../schemafile/RecordDuplicatedException.java | 2 +- .../metadata/schemafile/SchemaFileNotExists.java | 2 +- .../schemafile/SchemaPageOverflowException.java | 2 +- .../schemafile/SegmentNotFoundException.java | 2 +- .../schemafile/SegmentOverflowException.java | 2 +- .../template/DifferentTemplateException.java | 2 +- .../template/DuplicatedTemplateException.java | 2 +- .../template/NoTemplateOnMNodeException.java | 2 +- .../template/TemplateImcompatibeException.java | 2 +- .../template/TemplateIsInUseException.java | 2 +- .../template/UndefinedTemplateException.java | 2 +- .../iotdb/db/localconfignode/LocalConfigNode.java | 4 +- .../localconfignode/LocalDataPartitionTable.java | 2 +- .../localconfignode/LocalSchemaPartitionTable.java | 4 +- .../iotdb/db/metadata/LocalSchemaProcessor.java | 4 +- .../apache/iotdb/db/metadata/MetadataConstant.java | 2 +- .../db/metadata/cache/DataNodeSchemaCache.java | 4 +- .../idtable/AppendOnlyDiskSchemaManager.java | 2 +- .../apache/iotdb/db/metadata/idtable/IDTable.java | 4 +- .../db/metadata/idtable/IDTableHashmapImpl.java | 4 +- .../iotdb/db/metadata/idtable/IDTableManager.java | 4 +- .../db/metadata/idtable/entry/DeviceIDFactory.java | 2 +- .../idtable/entry/InsertMeasurementMNode.java | 2 +- .../db/metadata/idtable/entry/SchemaEntry.java | 2 +- .../db/metadata/idtable/entry/TimeseriesID.java | 2 +- .../db/metadata/lastCache/LastCacheManager.java | 2 +- .../iotdb/db/metadata/logfile/MLogWriter.java | 2 +- .../org/apache/iotdb/db/metadata/mnode/IMNode.java | 2 +- .../org/apache/iotdb/db/metadata/mnode/MNode.java | 2 +- .../iotdb/db/metadata/mtree/IMTreeBelowSG.java | 4 +- .../iotdb/db/metadata/mtree/MTreeAboveSG.java | 92 +++++- .../db/metadata/mtree/MTreeBelowSGCachedImpl.java | 12 +- .../db/metadata/mtree/MTreeBelowSGMemoryImpl.java | 12 +- .../db/metadata/mtree/store/CachedMTreeStore.java | 4 +- .../iotdb/db/metadata/mtree/store/IMTreeStore.java | 2 +- .../db/metadata/mtree/store/MemMTreeStore.java | 2 +- .../mtree/store/disk/schemafile/ISchemaFile.java | 2 +- .../mtree/store/disk/schemafile/ISchemaPage.java | 2 +- .../mtree/store/disk/schemafile/ISegment.java | 2 +- .../store/disk/schemafile/MockSchemaFile.java | 2 +- .../mtree/store/disk/schemafile/RecordUtils.java | 2 +- .../mtree/store/disk/schemafile/SchemaFile.java | 6 +- .../mtree/store/disk/schemafile/SchemaPage.java | 2 +- .../mtree/store/disk/schemafile/Segment.java | 2 +- .../db/metadata/mtree/traverser/Traverser.java | 6 +- .../traverser/collector/CollectorTraverser.java | 4 +- .../mtree/traverser/collector/EntityCollector.java | 4 +- .../traverser/collector/MNodeAboveSGCollector.java | 4 +- .../mtree/traverser/collector/MNodeCollector.java | 4 +- .../traverser/collector/MeasurementCollector.java | 4 +- .../traverser/collector/StorageGroupCollector.java | 4 +- .../mtree/traverser/counter/CounterTraverser.java | 4 +- .../mtree/traverser/counter/EntityCounter.java | 4 +- .../counter/MNodeAboveSGLevelCounter.java | 4 +- .../mtree/traverser/counter/MNodeLevelCounter.java | 4 +- .../traverser/counter/MeasurementCounter.java | 4 +- .../counter/MeasurementGroupByLevelCounter.java | 4 +- .../traverser/counter/StorageGroupCounter.java | 4 +- .../apache/iotdb/db/metadata/path/AlignedPath.java | 6 +- .../iotdb/db/metadata/path/MeasurementPath.java | 6 +- .../db/metadata/path/PathDeserializeUtil.java | 18 +- .../db/metadata/schemaregion/ISchemaRegion.java | 4 +- .../metadata/schemaregion/RSchemaRegionLoader.java | 2 +- .../db/metadata/schemaregion/SchemaEngine.java | 4 +- .../schemaregion/SchemaRegionMemoryImpl.java | 4 +- .../schemaregion/SchemaRegionSchemaFileImpl.java | 4 +- .../metadata/schemaregion/SchemaRegionUtils.java | 2 +- .../storagegroup/IStorageGroupSchemaManager.java | 4 +- .../storagegroup/StorageGroupLogWriter.java | 2 +- .../storagegroup/StorageGroupSchemaManager.java | 4 +- .../apache/iotdb/db/metadata/tag/TagLogFile.java | 2 +- .../apache/iotdb/db/metadata/tag/TagManager.java | 4 +- .../iotdb/db/metadata/template/Template.java | 28 +- .../db/metadata/template/TemplateManager.java | 4 +- .../db/metadata/tree/AbstractTreeVisitor.java | 2 +- .../tree/AbstractTreeVisitorWithLimitOffset.java | 2 +- .../db/metadata/upgrade/MetadataUpgrader.java | 4 +- .../iotdb/db/metadata/utils/MetaFormatUtils.java | 6 +- .../apache/iotdb/db/metadata/utils/MetaUtils.java | 77 +---- .../db/metadata/utils/ResourceByPathUtils.java | 2 +- .../metadata/visitor/SchemaExecutionVisitor.java | 2 +- .../db/mpp/common/filter/BasicFunctionFilter.java | 4 +- .../iotdb/db/mpp/common/filter/FunctionFilter.java | 2 +- .../iotdb/db/mpp/common/filter/InFilter.java | 4 +- .../iotdb/db/mpp/common/filter/LikeFilter.java | 4 +- .../iotdb/db/mpp/common/filter/QueryFilter.java | 4 +- .../iotdb/db/mpp/common/filter/RegexpFilter.java | 4 +- .../iotdb/db/mpp/common/header/ColumnHeader.java | 4 +- .../db/mpp/common/schematree/DeviceSchemaInfo.java | 2 +- .../db/mpp/common/schematree/PathPatternTree.java | 4 +- .../iotdb/db/mpp/common/schematree/SchemaTree.java | 4 +- .../visitor/SchemaTreeDeviceVisitor.java | 2 +- .../visitor/SchemaTreeMeasurementVisitor.java | 2 +- .../schematree/visitor/SchemaTreeVisitor.java | 2 +- .../iotdb/db/mpp/execution/driver/DataDriver.java | 2 +- .../db/mpp/execution/driver/DataDriverContext.java | 2 +- .../execution/operator/process/FilterOperator.java | 4 +- .../operator/process/TransformOperator.java | 22 +- .../operator/schema/DevicesCountOperator.java | 4 +- .../operator/schema/DevicesSchemaScanOperator.java | 4 +- .../schema/LevelTimeSeriesCountOperator.java | 4 +- .../operator/schema/SchemaFetchOperator.java | 4 +- .../operator/schema/SchemaScanOperator.java | 2 +- .../operator/schema/TimeSeriesCountOperator.java | 4 +- .../schema/TimeSeriesSchemaScanOperator.java | 4 +- .../operator/source/AlignedSeriesScanUtil.java | 2 +- .../source/SeriesAggregateScanOperator.java | 2 +- .../operator/source/SeriesScanOperator.java | 2 +- .../execution/operator/source/SeriesScanUtil.java | 2 +- .../apache/iotdb/db/mpp/plan/analyze/Analysis.java | 2 +- .../apache/iotdb/db/mpp/plan/analyze/Analyzer.java | 2 +- .../mpp/plan/analyze/ClusterPartitionFetcher.java | 4 +- .../db/mpp/plan/analyze/ClusterSchemaFetcher.java | 2 +- .../db/mpp/plan/analyze/FakeSchemaFetcherImpl.java | 2 +- .../iotdb/db/mpp/plan/analyze/ISchemaFetcher.java | 2 +- .../plan/analyze/StandalonePartitionFetcher.java | 4 +- .../mpp/plan/analyze/StandaloneSchemaFetcher.java | 4 +- .../execution/config/CountStorageGroupTask.java | 2 +- .../plan/execution/config/SetStorageGroupTask.java | 2 +- .../db/mpp/plan/execution/config/SetTTLTask.java | 2 +- .../execution/config/ShowStorageGroupTask.java | 4 +- .../db/mpp/plan/execution/config/ShowTTLTask.java | 4 +- .../iotdb/db/mpp/plan/parser/ASTVisitor.java | 7 +- .../db/mpp/plan/parser/StatementGenerator.java | 4 +- .../db/mpp/plan/planner/LocalExecutionPlanner.java | 2 +- .../db/mpp/plan/planner/LogicalPlanBuilder.java | 2 +- .../mpp/plan/planner/plan/node/PlanNodeType.java | 2 +- .../plan/node/metedata/read/DevicesCountNode.java | 4 +- .../node/metedata/read/DevicesSchemaScanNode.java | 4 +- .../metedata/read/LevelTimeSeriesCountNode.java | 4 +- .../plan/node/metedata/read/SchemaScanNode.java | 2 +- .../node/metedata/read/TimeSeriesCountNode.java | 4 +- .../metedata/read/TimeSeriesSchemaScanNode.java | 4 +- .../node/metedata/write/AlterTimeSeriesNode.java | 4 +- .../write/CreateAlignedTimeSeriesNode.java | 4 +- .../node/metedata/write/CreateTimeSeriesNode.java | 4 +- .../planner/plan/node/write/BatchInsertNode.java | 2 +- .../plan/node/write/InsertMultiTabletsNode.java | 2 +- .../plan/planner/plan/node/write/InsertNode.java | 2 +- .../planner/plan/node/write/InsertRowNode.java | 4 +- .../planner/plan/node/write/InsertRowsNode.java | 2 +- .../plan/node/write/InsertRowsOfOneDeviceNode.java | 4 +- .../planner/plan/node/write/InsertTabletNode.java | 4 +- .../db/mpp/plan/rewriter/ConcatPathRewriter.java | 8 +- .../plan/rewriter/MergeSingleFilterOptimizer.java | 2 +- .../db/mpp/plan/rewriter/RemoveNotOptimizer.java | 2 +- .../db/mpp/plan/rewriter/WildcardsRemover.java | 4 +- .../iotdb/db/mpp/plan/statement/Statement.java | 2 +- .../plan/statement/component/FromComponent.java | 2 +- .../component/GroupByLevelController.java | 2 +- .../mpp/plan/statement/component/ResultColumn.java | 2 +- .../plan/statement/component/SelectComponent.java | 2 +- .../statement/crud/AggregationQueryStatement.java | 2 +- .../plan/statement/crud/InsertBaseStatement.java | 2 +- .../crud/InsertMultiTabletsStatement.java | 2 +- .../plan/statement/crud/InsertRowStatement.java | 2 +- .../crud/InsertRowsOfOneDeviceStatement.java | 2 +- .../plan/statement/crud/InsertRowsStatement.java | 2 +- .../mpp/plan/statement/crud/InsertStatement.java | 2 +- .../plan/statement/crud/InsertTabletStatement.java | 2 +- .../db/mpp/plan/statement/crud/QueryStatement.java | 2 +- .../metadata/AlterTimeSeriesStatement.java | 2 +- .../statement/metadata/CountDevicesStatement.java | 2 +- .../metadata/CountLevelTimeSeriesStatement.java | 2 +- .../statement/metadata/CountNodesStatement.java | 2 +- .../plan/statement/metadata/CountStatement.java | 2 +- .../metadata/CountStorageGroupStatement.java | 2 +- .../metadata/CountTimeSeriesStatement.java | 2 +- .../metadata/CreateAlignedTimeSeriesStatement.java | 4 +- .../metadata/CreateTimeSeriesStatement.java | 2 +- .../statement/metadata/SchemaFetchStatement.java | 2 +- .../metadata/SetStorageGroupStatement.java | 2 +- .../plan/statement/metadata/SetTTLStatement.java | 2 +- .../statement/metadata/ShowDevicesStatement.java | 2 +- .../mpp/plan/statement/metadata/ShowStatement.java | 2 +- .../metadata/ShowStorageGroupStatement.java | 2 +- .../plan/statement/metadata/ShowTTLStatement.java | 2 +- .../metadata/ShowTimeSeriesStatement.java | 2 +- .../db/mpp/plan/statement/sys/AuthorStatement.java | 2 +- .../iotdb/db/protocol/influxdb/dto/IoTDBPoint.java | 4 +- .../db/protocol/influxdb/handler/QueryHandler.java | 2 +- .../influxdb/meta/InfluxDBMetaManager.java | 6 +- .../db/protocol/influxdb/meta/TagInfoRecords.java | 4 +- .../protocol/influxdb/sql/InfluxDBSqlVisitor.java | 2 +- .../iotdb/db/protocol/mqtt/PublishHandler.java | 2 +- .../db/protocol/rest/handler/ExceptionHandler.java | 4 +- .../handler/PhysicalPlanConstructionHandler.java | 4 +- .../protocol/rest/impl/GrafanaApiServiceImpl.java | 2 +- .../main/java/org/apache/iotdb/db/qp/Planner.java | 2 +- .../apache/iotdb/db/qp/constant/SQLConstant.java | 2 +- .../apache/iotdb/db/qp/executor/IPlanExecutor.java | 4 +- .../apache/iotdb/db/qp/executor/PlanExecutor.java | 6 +- .../qp/logical/crud/AggregationQueryOperator.java | 4 +- .../db/qp/logical/crud/BasicFunctionOperator.java | 4 +- .../db/qp/logical/crud/DeleteDataOperator.java | 2 +- .../iotdb/db/qp/logical/crud/FilterOperator.java | 4 +- .../iotdb/db/qp/logical/crud/FromComponent.java | 2 +- .../db/qp/logical/crud/GroupByQueryOperator.java | 2 +- .../iotdb/db/qp/logical/crud/InOperator.java | 4 +- .../iotdb/db/qp/logical/crud/InsertOperator.java | 2 +- .../iotdb/db/qp/logical/crud/LikeOperator.java | 4 +- .../iotdb/db/qp/logical/crud/QueryOperator.java | 4 +- .../iotdb/db/qp/logical/crud/RegexpOperator.java | 4 +- .../iotdb/db/qp/logical/crud/SelectComponent.java | 6 +- .../db/qp/logical/crud/SelectIntoOperator.java | 2 +- .../qp/logical/sys/ActivateTemplateOperator.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 +- .../sys/CreateAlignedTimeSeriesOperator.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 +- .../db/qp/logical/sys/SetTemplateOperator.java | 4 +- .../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 +- .../db/qp/logical/sys/UnsetTemplateOperator.java | 4 +- .../org/apache/iotdb/db/qp/physical/BatchPlan.java | 2 +- .../apache/iotdb/db/qp/physical/PhysicalPlan.java | 4 +- .../iotdb/db/qp/physical/crud/AggregationPlan.java | 4 +- .../db/qp/physical/crud/AlignByDevicePlan.java | 2 +- .../db/qp/physical/crud/DeletePartitionPlan.java | 2 +- .../iotdb/db/qp/physical/crud/DeletePlan.java | 4 +- .../iotdb/db/qp/physical/crud/GroupByTimePlan.java | 2 +- .../qp/physical/crud/InsertMultiTabletsPlan.java | 4 +- .../iotdb/db/qp/physical/crud/InsertPlan.java | 2 +- .../iotdb/db/qp/physical/crud/InsertRowPlan.java | 4 +- .../physical/crud/InsertRowsOfOneDevicePlan.java | 4 +- .../iotdb/db/qp/physical/crud/InsertRowsPlan.java | 4 +- .../db/qp/physical/crud/InsertTabletPlan.java | 4 +- .../iotdb/db/qp/physical/crud/LastQueryPlan.java | 2 +- .../iotdb/db/qp/physical/crud/QueryPlan.java | 6 +- .../db/qp/physical/crud/RawDataQueryPlan.java | 4 +- .../iotdb/db/qp/physical/crud/SelectIntoPlan.java | 4 +- .../apache/iotdb/db/qp/physical/crud/UDAFPlan.java | 2 +- .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java | 8 +- .../db/qp/physical/sys/ActivateTemplatePlan.java | 4 +- .../db/qp/physical/sys/AlterTimeSeriesPlan.java | 4 +- .../db/qp/physical/sys/AppendTemplatePlan.java | 2 +- .../iotdb/db/qp/physical/sys/AuthorPlan.java | 4 +- .../qp/physical/sys/AutoCreateDeviceMNodePlan.java | 4 +- .../iotdb/db/qp/physical/sys/ChangeAliasPlan.java | 4 +- .../db/qp/physical/sys/ChangeTagOffsetPlan.java | 4 +- .../iotdb/db/qp/physical/sys/ClearCachePlan.java | 4 +- .../apache/iotdb/db/qp/physical/sys/CountPlan.java | 2 +- .../physical/sys/CreateAlignedTimeSeriesPlan.java | 4 +- .../qp/physical/sys/CreateContinuousQueryPlan.java | 4 +- .../db/qp/physical/sys/CreateFunctionPlan.java | 4 +- .../iotdb/db/qp/physical/sys/CreateIndexPlan.java | 4 +- .../qp/physical/sys/CreateMultiTimeSeriesPlan.java | 4 +- .../iotdb/db/qp/physical/sys/CreatePipePlan.java | 2 +- .../db/qp/physical/sys/CreatePipeSinkPlan.java | 2 +- .../db/qp/physical/sys/CreateTemplatePlan.java | 4 +- .../db/qp/physical/sys/CreateTimeSeriesPlan.java | 4 +- .../db/qp/physical/sys/CreateTriggerPlan.java | 4 +- .../iotdb/db/qp/physical/sys/DataAuthPlan.java | 2 +- .../db/qp/physical/sys/DeleteStorageGroupPlan.java | 4 +- .../db/qp/physical/sys/DeleteTimeSeriesPlan.java | 4 +- .../qp/physical/sys/DropContinuousQueryPlan.java | 2 +- .../iotdb/db/qp/physical/sys/DropFunctionPlan.java | 4 +- .../iotdb/db/qp/physical/sys/DropIndexPlan.java | 4 +- .../iotdb/db/qp/physical/sys/DropPipeSinkPlan.java | 2 +- .../iotdb/db/qp/physical/sys/DropTemplatePlan.java | 2 +- .../iotdb/db/qp/physical/sys/DropTriggerPlan.java | 4 +- .../apache/iotdb/db/qp/physical/sys/FlushPlan.java | 4 +- .../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 | 4 +- .../iotdb/db/qp/physical/sys/OperateFilePlan.java | 2 +- .../iotdb/db/qp/physical/sys/OperatePipePlan.java | 2 +- .../db/qp/physical/sys/PruneTemplatePlan.java | 2 +- .../db/qp/physical/sys/SetStorageGroupPlan.java | 4 +- .../db/qp/physical/sys/SetSystemModePlan.java | 4 +- .../iotdb/db/qp/physical/sys/SetTTLPlan.java | 4 +- .../iotdb/db/qp/physical/sys/SetTemplatePlan.java | 8 +- .../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 | 4 +- .../iotdb/db/qp/physical/sys/ShowLockInfoPlan.java | 2 +- .../apache/iotdb/db/qp/physical/sys/ShowPlan.java | 2 +- .../db/qp/physical/sys/ShowQueryResourcePlan.java | 2 +- .../db/qp/physical/sys/ShowStorageGroupPlan.java | 2 +- .../iotdb/db/qp/physical/sys/ShowTTLPlan.java | 2 +- .../db/qp/physical/sys/ShowTimeSeriesPlan.java | 4 +- .../db/qp/physical/sys/StartPipeServerPlan.java | 4 +- .../iotdb/db/qp/physical/sys/StartTriggerPlan.java | 4 +- .../db/qp/physical/sys/StopPipeServerPlan.java | 4 +- .../iotdb/db/qp/physical/sys/StopTriggerPlan.java | 4 +- .../db/qp/physical/sys/StorageGroupMNodePlan.java | 2 +- .../iotdb/db/qp/physical/sys/TracingPlan.java | 2 +- .../db/qp/physical/sys/UnsetTemplatePlan.java | 8 +- .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 7 +- .../iotdb/db/qp/strategy/LogicalGenerator.java | 4 +- .../iotdb/db/qp/strategy/PhysicalGenerator.java | 4 +- .../qp/strategy/optimizer/ConcatPathOptimizer.java | 10 +- .../optimizer/MergeSingleFilterOptimizer.java | 2 +- .../qp/strategy/optimizer/RemoveNotOptimizer.java | 2 +- .../iotdb/db/qp/utils/GroupByLevelController.java | 2 +- .../apache/iotdb/db/qp/utils/WildcardsRemover.java | 4 +- .../iotdb/db/query/context/QueryContext.java | 2 +- .../db/query/control/QueryResourceManager.java | 2 +- .../iotdb/db/query/control/SessionManager.java | 64 ++--- .../db/query/dataset/AlignByDeviceDataSet.java | 2 +- .../apache/iotdb/db/query/dataset/ListDataSet.java | 2 +- .../db/query/dataset/NonAlignEngineDataSet.java | 2 +- .../dataset/RawQueryDataSetWithValueFilter.java | 2 +- .../dataset/RawQueryDataSetWithoutValueFilter.java | 2 +- .../query/dataset/ShowContinuousQueriesResult.java | 2 +- .../apache/iotdb/db/query/dataset/ShowDataSet.java | 2 +- .../iotdb/db/query/dataset/ShowDevicesDataSet.java | 4 +- .../db/query/dataset/ShowTimeseriesDataSet.java | 4 +- .../iotdb/db/query/dataset/SingleDataSet.java | 2 +- .../apache/iotdb/db/query/dataset/UDTFDataSet.java | 2 +- .../query/dataset/groupby/GroupByLevelDataSet.java | 4 +- .../groupby/GroupByWithValueFilterDataSet.java | 2 +- .../groupby/GroupByWithoutValueFilterDataSet.java | 2 +- .../db/query/executor/AggregationExecutor.java | 2 +- .../iotdb/db/query/executor/FillQueryExecutor.java | 2 +- .../iotdb/db/query/executor/LastQueryExecutor.java | 4 +- .../db/query/executor/RawDataQueryExecutor.java | 2 +- .../executor/fill/AlignedLastPointReader.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 +- .../groupby/impl/LocalAlignedGroupByExecutor.java | 2 +- .../groupby/impl/LocalGroupByExecutor.java | 2 +- .../iotdb/db/query/expression/Expression.java | 6 +- .../iotdb/db/query/expression/ExpressionType.java | 4 +- .../iotdb/db/query/expression/ResultColumn.java | 2 +- .../query/expression/binary/BinaryExpression.java | 2 +- .../db/query/expression/leaf/ConstantOperand.java | 2 +- .../query/expression/leaf/TimeSeriesOperand.java | 6 +- ...imeSeriesOperand.java => TimestampOperand.java} | 69 ++--- .../query/expression/multi/FunctionExpression.java | 4 +- .../db/query/expression/unary/UnaryExpression.java | 2 +- .../chunk/metadata/DiskChunkMetadataLoader.java | 2 +- .../metadata/MemAlignedChunkMetadataLoader.java | 2 +- .../chunk/metadata/MemChunkMetadataLoader.java | 2 +- .../query/reader/series/AlignedSeriesReader.java | 2 +- .../query/reader/series/SeriesAggregateReader.java | 2 +- .../reader/series/SeriesRawDataBatchReader.java | 2 +- .../iotdb/db/query/reader/series/SeriesReader.java | 2 +- .../reader/series/SeriesReaderByTimestamp.java | 2 +- .../query/timegenerator/ServerTimeGenerator.java | 2 +- .../parameter/UDFParameterValidator.java | 2 +- .../api/customizer/parameter/UDFParameters.java | 4 +- .../apache/iotdb/db/query/udf/builtin/UDTFAbs.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFCast.java | 2 +- .../query/udf/builtin/UDTFContinuouslySatisfy.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFDerivative.java | 2 +- .../udf/builtin/UDTFEqualSizeBucketAggSample.java | 2 +- .../builtin/UDTFEqualSizeBucketOutlierSample.java | 2 +- .../udf/builtin/UDTFEqualSizeBucketSample.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFInRange.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFMath.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFOnOff.java | 2 +- .../iotdb/db/query/udf/builtin/UDTFSelectK.java | 2 +- .../db/query/udf/builtin/UDTFValueDifference.java | 2 +- .../query/udf/core/layer/RawQueryInputLayer.java | 139 +++++++-- .../org/apache/iotdb/db/service/SettleService.java | 4 +- .../iotdb/db/service/basic/ServiceProvider.java | 2 +- .../service/thrift/impl/InfluxDBServiceImpl.java | 4 +- .../service/thrift/impl/InternalServiceImpl.java | 6 +- .../db/service/thrift/impl/TSServiceImpl.java | 6 +- .../iotdb/db/sync/pipedata/DeletionPipeData.java | 2 +- .../apache/iotdb/db/sync/pipedata/PipeData.java | 2 +- .../iotdb/db/sync/pipedata/SchemaPipeData.java | 2 +- .../sync/pipedata/queue/BufferedPipeDataQueue.java | 2 +- .../iotdb/db/sync/receiver/ReceiverService.java | 2 +- .../iotdb/db/sync/receiver/load/SchemaLoader.java | 2 +- .../db/sync/sender/manager/SchemaSyncManager.java | 4 +- .../db/sync/sender/manager/TsFileSyncManager.java | 2 +- .../iotdb/db/sync/sender/pipe/TsFilePipe.java | 4 +- .../transport/server/TransportServiceImpl.java | 2 +- .../apache/iotdb/db/tools/TsFileRewriteTool.java | 4 +- .../java/org/apache/iotdb/db/tools/WalChecker.java | 2 +- .../db/tools/dataregion/DeviceMappingViewer.java | 4 +- .../apache/iotdb/db/tools/schema/MLogParser.java | 2 +- .../db/tools/schema/SchemaFileSketchTool.java | 2 +- .../db/tools/settle/TsFileAndModSettleTool.java | 2 +- .../db/tools/upgrade/TsFileOnlineUpgradeTool.java | 2 +- .../org/apache/iotdb/db/utils/FileLoaderUtils.java | 2 +- .../org/apache/iotdb/db/utils/SchemaUtils.java | 6 +- .../iotdb/db/utils/writelog/BatchLogReader.java | 2 +- .../org/apache/iotdb/db/wal/buffer/WALEntry.java | 2 +- .../java/org/apache/iotdb/db/wal/io/WALReader.java | 2 +- .../java/org/apache/iotdb/db/wal/node/WALNode.java | 4 +- .../db/wal/recover/file/TsFilePlanRedoer.java | 4 +- .../apache/iotdb/db/auth/AuthorityCheckerTest.java | 4 +- .../iotdb/db/engine/MetadataManagerHelper.java | 2 +- .../iotdb/db/engine/cache/ChunkCacheTest.java | 4 +- .../engine/compaction/AbstractCompactionTest.java | 4 +- .../engine/compaction/CompactionSchedulerTest.java | 4 +- .../ReadPointCompactionPerformerTest.java | 6 +- .../compaction/TestUtilsForAlignedSeries.java | 4 +- .../cross/CrossSpaceCompactionExceptionTest.java | 2 +- .../compaction/cross/CrossSpaceCompactionTest.java | 4 +- .../db/engine/compaction/cross/MergeTest.java | 4 +- .../RewriteCrossSpaceCompactionRecoverTest.java | 2 +- .../cross/RewriteCrossSpaceCompactionTest.java | 6 +- .../inner/AbstractInnerSpaceCompactionTest.java | 4 +- .../inner/InnerCompactionMoreDataTest.java | 4 +- .../inner/InnerCompactionSchedulerTest.java | 2 +- .../compaction/inner/InnerCompactionTest.java | 4 +- .../compaction/inner/InnerSeqCompactionTest.java | 6 +- .../compaction/inner/InnerUnseqCompactionTest.java | 4 +- .../ReadChunkCompactionPerformerAlignedTest.java | 2 +- .../ReadChunkCompactionPerformerNoAlignedTest.java | 4 +- .../inner/ReadChunkCompactionPerformerOldTest.java | 2 +- .../SizeTieredCompactionRecoverTest.java | 2 +- .../inner/sizetiered/SizeTieredCompactionTest.java | 4 +- ...eCrossSpaceCompactionRecoverCompatibleTest.java | 4 +- .../SizeTieredCompactionRecoverCompatibleTest.java | 2 +- .../recover/SizeTieredCompactionRecoverTest.java | 4 +- .../compaction/utils/CompactionCheckerUtils.java | 4 +- .../utils/CompactionFileGeneratorUtils.java | 4 +- .../db/engine/memtable/MemTableFlushTaskTest.java | 2 +- .../db/engine/memtable/MemTableTestUtils.java | 4 +- .../db/engine/memtable/MemtableBenchmark.java | 4 +- .../db/engine/memtable/PrimitiveMemTableTest.java | 6 +- .../engine/modification/DeletionFileNodeTest.java | 4 +- .../db/engine/modification/DeletionQueryTest.java | 4 +- .../engine/modification/ModificationFileTest.java | 2 +- .../io/LocalTextModificationAccessorTest.java | 2 +- .../db/engine/storagegroup/DataRegionTest.java | 6 +- .../storagegroup/FileNodeManagerBenchmark.java | 4 +- .../storagegroup/StorageGroupProcessorTest.java | 6 +- .../iotdb/db/engine/storagegroup/TTLTest.java | 6 +- .../db/engine/storagegroup/TsFileManagerTest.java | 2 +- .../engine/storagegroup/TsFileProcessorTest.java | 6 +- .../engine/storagegroup/TsFileProcessorV2Test.java | 6 +- .../dataregion/HashVirtualPartitionerTest.java | 4 +- .../apache/iotdb/db/metadata/MetaUtilsTest.java | 45 +-- .../apache/iotdb/db/metadata/PartialPathTest.java | 4 +- .../iotdb/db/metadata/SchemaAdvancedTest.java | 4 +- .../apache/iotdb/db/metadata/SchemaBasicTest.java | 6 +- .../iotdb/db/metadata/SchemaImproveTest.java | 6 +- .../org/apache/iotdb/db/metadata/TemplateTest.java | 6 +- .../db/metadata/cache/DataNodeSchemaCacheTest.java | 4 +- .../db/metadata/idtable/IDTableFlushTimeTest.java | 6 +- .../db/metadata/idtable/IDTableLogFileTest.java | 2 +- .../db/metadata/idtable/IDTableRecoverTest.java | 4 +- .../idtable/IDTableResourceControlTest.java | 6 +- .../db/metadata/idtable/IDTableRestartTest.java | 4 +- .../iotdb/db/metadata/idtable/IDTableTest.java | 4 +- .../db/metadata/idtable/InsertWithIDTableTest.java | 6 +- .../db/metadata/idtable/LastQueryWithIDTable.java | 6 +- .../QueryAlignedTimeseriesWithIDTableTest.java | 6 +- .../db/metadata/idtable/QueryWithIDTableTest.java | 6 +- .../db/metadata/idtable/entry/DeviceIDTest.java | 4 +- .../db/metadata/idtable/entry/SchemaEntryTest.java | 2 +- .../iotdb/db/metadata/mtree/MTreeAboveSGTest.java | 53 +++- .../iotdb/db/metadata/mtree/MTreeBelowSGTest.java | 4 +- .../db/metadata/mtree/disk/MemManagerTest.java | 2 +- .../metadata/mtree/schemafile/RecordUtilTests.java | 2 +- .../metadata/mtree/schemafile/SchemaFileTest.java | 8 +- .../metadata/mtree/schemafile/SchemaPageTest.java | 3 +- .../db/metadata/mtree/schemafile/SegmentTest.java | 2 +- .../db/metadata/upgrade/MetadataUpgradeTest.java | 4 +- .../mpp/common/schematree/PathPatternTreeTest.java | 4 +- .../db/mpp/common/schematree/SchemaTreeTest.java | 4 +- .../iotdb/db/mpp/execution/DataDriverTest.java | 6 +- .../operator/AlignedSeriesScanOperatorTest.java | 314 ++++++++++++++++++++- .../execution/operator/AlignedSeriesTestUtil.java | 4 +- .../execution/operator/DeviceViewOperatorTest.java | 4 +- .../mpp/execution/operator/LimitOperatorTest.java | 4 +- .../mpp/execution/operator/OffsetOperatorTest.java | 4 +- .../operator/SeriesAggregateScanOperatorTest.java | 4 +- .../execution/operator/SeriesScanOperatorTest.java | 4 +- .../execution/operator/TimeJoinOperatorTest.java | 4 +- .../operator/schema/CountMergeOperatorTest.java | 4 +- .../operator/schema/SchemaCountOperatorTest.java | 4 +- .../operator/schema/SchemaFetchOperatorTest.java | 2 +- .../operator/schema/SchemaScanOperatorTest.java | 4 +- .../db/mpp/plan/parser/StatementGeneratorTest.java | 2 +- .../db/mpp/plan/plan/DistributionPlannerTest.java | 4 +- .../mpp/plan/plan/FragmentInstanceSerdeTest.java | 2 +- .../iotdb/db/mpp/plan/plan/LogicalPlannerTest.java | 4 +- .../db/mpp/plan/plan/QueryLogicalPlanUtil.java | 2 +- .../plan/plan/node/PlanNodeDeserializeHelper.java | 2 +- .../read/DeviceSchemaScanNodeSerdeTest.java | 4 +- .../metadata/read/SchemaCountNodeSerdeTest.java | 4 +- .../read/TimeSeriesSchemaScanNodeSerdeTest.java | 4 +- .../node/process/AggregationNodeSerdeTest.java | 4 +- .../plan/node/process/DeviceViewNodeSerdeTest.java | 2 +- .../plan/node/process/ExchangeNodeSerdeTest.java | 2 +- .../plan/plan/node/process/FillNodeSerdeTest.java | 4 +- .../plan/node/process/FilterNodeSerdeTest.java | 4 +- .../plan/node/process/FilterNullNodeSerdeTest.java | 4 +- .../node/process/GroupByLevelNodeSerdeTest.java | 4 +- .../plan/plan/node/process/LimitNodeSerdeTest.java | 2 +- .../plan/node/process/OffsetNodeSerdeTest.java | 2 +- .../plan/plan/node/process/SortNodeSerdeTest.java | 2 +- .../plan/node/process/TimeJoinNodeSerdeTest.java | 2 +- .../plan/node/sink/FragmentSinkNodeSerdeTest.java | 4 +- .../source/SeriesAggregationScanNodeSerdeTest.java | 4 +- .../plan/node/source/SeriesScanNodeSerdeTest.java | 2 +- .../write/InsertMultiTabletsNodeSerdeTest.java | 4 +- .../plan/node/write/InsertRowNodeSerdeTest.java | 4 +- .../plan/node/write/InsertRowsNodeSerdeTest.java | 4 +- .../write/InsertRowsOfOneDeviceNodeSerdeTest.java | 4 +- .../plan/node/write/InsertTabletNodeSerdeTest.java | 4 +- .../plan/node/write/WritePlanNodeSplitTest.java | 4 +- .../java/org/apache/iotdb/db/qp/PlannerTest.java | 6 +- .../iotdb/db/qp/logical/LogicalPlanSmallTest.java | 4 +- .../iotdb/db/qp/other/TSPlanContextAuthorTest.java | 2 +- .../iotdb/db/qp/physical/ConcatOptimizerTest.java | 4 +- .../iotdb/db/qp/physical/InsertRowPlanTest.java | 6 +- .../qp/physical/InsertRowsOfOneDevicePlanTest.java | 4 +- .../db/qp/physical/InsertTabletMultiPlanTest.java | 4 +- .../iotdb/db/qp/physical/InsertTabletPlanTest.java | 6 +- .../db/qp/physical/PhysicalPlanSerializeTest.java | 4 +- .../iotdb/db/qp/physical/PhysicalPlanTest.java | 6 +- .../iotdb/db/qp/physical/SerializationTest.java | 6 +- .../iotdb/db/qp/physical/SerializedSizeTest.java | 4 +- .../iotdb/db/query/dataset/ListDataSetTest.java | 2 +- .../iotdb/db/query/dataset/SingleDataSetTest.java | 2 +- .../query/dataset/UDTFAlignByTimeDataSetTest.java | 4 +- .../reader/series/SeriesAggregateReaderTest.java | 2 +- .../reader/series/SeriesReaderByTimestampTest.java | 2 +- .../db/query/reader/series/SeriesReaderTest.java | 6 +- .../query/reader/series/SeriesReaderTestUtil.java | 4 +- .../iotdb/db/rescon/ResourceManagerTest.java | 4 +- .../iotdb/db/service/InternalServiceImplTest.java | 4 +- .../org/apache/iotdb/db/sink/MQTTSinkTest.java | 2 +- .../sync/pipedata/BufferedPipeDataQueueTest.java | 2 +- .../iotdb/db/sync/pipedata/PipeDataTest.java | 2 +- .../db/sync/transport/TransportServiceTest.java | 2 +- .../org/apache/iotdb/db/tools/MLogParserTest.java | 4 +- .../iotdb/db/tools/SchemaFileSketchTest.java | 2 +- .../iotdb/db/tools/TsFileAndModSettleToolTest.java | 4 +- .../org/apache/iotdb/db/tools/WalCheckerTest.java | 2 +- .../org/apache/iotdb/db/utils/MemUtilsTest.java | 4 +- .../org/apache/iotdb/db/utils/SchemaTestUtils.java | 4 +- .../org/apache/iotdb/db/utils/SchemaUtilsTest.java | 4 +- .../iotdb/db/utils/TsFileRewriteToolTest.java | 4 +- .../db/utils/writelog/LogWriterReaderTest.java | 4 +- .../db/utils/writelog/MultiFileLogReaderTest.java | 4 +- .../org/apache/iotdb/db/wal/WALManagerTest.java | 4 +- .../iotdb/db/wal/buffer/WALBufferCommonTest.java | 4 +- .../org/apache/iotdb/db/wal/io/WALFileTest.java | 4 +- .../org/apache/iotdb/db/wal/node/WALNodeTest.java | 4 +- .../db/wal/recover/WALRecoverManagerTest.java | 6 +- .../db/wal/recover/file/TsFilePlanRedoerTest.java | 2 +- .../file/UnsealedTsFileRecoverPerformerTest.java | 2 +- .../org/apache/iotdb/rpc/IoTDBJDBCDataSet.java | 3 +- 752 files changed, 2164 insertions(+), 1461 deletions(-) diff --cc server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java index 6fd6b513ef,e78e5e4738..b4a4bb93cc --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java @@@ -18,9 -18,8 +18,9 @@@ */ package org.apache.iotdb.db.mpp.plan.planner; + import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.engine.storagegroup.DataRegion; +import org.apache.iotdb.db.metadata.path.AlignedPath; - import org.apache.iotdb.db.metadata.path.PartialPath; import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion; import org.apache.iotdb.db.mpp.common.FragmentInstanceId; import org.apache.iotdb.db.mpp.execution.datatransfer.DataBlockManager; diff --cc server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesScanOperatorTest.java index 6cfac9abed,0000000000..97121b80e3 mode 100644,000000..100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesScanOperatorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesScanOperatorTest.java @@@ -1,456 -1,0 +1,748 @@@ +/* + * 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.mpp.execution.operator; + +import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory; ++import org.apache.iotdb.commons.exception.IllegalPathException; ++import org.apache.iotdb.commons.exception.MetadataException; +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.path.AlignedPath; +import org.apache.iotdb.db.metadata.path.MeasurementPath; +import org.apache.iotdb.db.mpp.common.FragmentInstanceId; +import org.apache.iotdb.db.mpp.common.PlanFragmentId; +import org.apache.iotdb.db.mpp.common.QueryId; +import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceContext; +import org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceStateMachine; +import org.apache.iotdb.db.mpp.execution.operator.process.TimeJoinOperator; +import org.apache.iotdb.db.mpp.execution.operator.process.merge.AscTimeComparator; ++import org.apache.iotdb.db.mpp.execution.operator.process.merge.DescTimeComparator; +import org.apache.iotdb.db.mpp.execution.operator.process.merge.SingleColumnMerger; +import org.apache.iotdb.db.mpp.execution.operator.source.AlignedSeriesScanOperator; +import org.apache.iotdb.db.mpp.execution.operator.source.SeriesScanOperator; +import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; +import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation; +import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; +import org.apache.iotdb.tsfile.exception.write.WriteProcessException; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.read.common.block.TsBlock; +import org.apache.iotdb.tsfile.read.common.block.column.BinaryColumn; +import org.apache.iotdb.tsfile.read.common.block.column.BooleanColumn; +import org.apache.iotdb.tsfile.read.common.block.column.DoubleColumn; +import org.apache.iotdb.tsfile.read.common.block.column.FloatColumn; +import org.apache.iotdb.tsfile.read.common.block.column.IntColumn; +import org.apache.iotdb.tsfile.read.common.block.column.LongColumn; +import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; +import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; + - import org.junit.After; - import org.junit.Before; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; + +import static org.apache.iotdb.db.mpp.execution.fragment.FragmentInstanceContext.createFragmentInstanceContext; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +public class AlignedSeriesScanOperatorTest { + + private static final String SERIES_SCAN_OPERATOR_TEST_SG = "root.AlignedSeriesScanOperatorTest"; - private final List<MeasurementSchema> measurementSchemas = new ArrayList<>(); ++ private static final List<MeasurementSchema> measurementSchemas = new ArrayList<>(); + - private final List<TsFileResource> seqResources = new ArrayList<>(); - private final List<TsFileResource> unSeqResources = new ArrayList<>(); ++ private static final List<TsFileResource> seqResources = new ArrayList<>(); ++ private static final List<TsFileResource> unSeqResources = new ArrayList<>(); + + private static final double DELTA = 0.000001; + - @Before - public void setUp() throws MetadataException, IOException, WriteProcessException { ++ @BeforeClass ++ public static void setUp() throws MetadataException, IOException, WriteProcessException { + AlignedSeriesTestUtil.setUp( + measurementSchemas, seqResources, unSeqResources, SERIES_SCAN_OPERATOR_TEST_SG); + } + - @After - public void tearDown() throws IOException { ++ @AfterClass ++ public static void tearDown() throws IOException { + AlignedSeriesTestUtil.tearDown(seqResources, unSeqResources); + } + + @Test + public void batchTest1() { + ExecutorService instanceNotificationExecutor = + IoTDBThreadPoolFactory.newFixedThreadPool(1, "test-instance-notification"); + try { + AlignedPath alignedPath = + new AlignedPath( + SERIES_SCAN_OPERATOR_TEST_SG + ".device0", + measurementSchemas.stream() + .map(MeasurementSchema::getMeasurementId) + .collect(Collectors.toList()), + measurementSchemas.stream() + .map(m -> (IMeasurementSchema) m) + .collect(Collectors.toList())); + QueryId queryId = new QueryId("stub_query"); + FragmentInstanceId instanceId = + new FragmentInstanceId(new PlanFragmentId(queryId, 0), "stub-instance"); + FragmentInstanceStateMachine stateMachine = + new FragmentInstanceStateMachine(instanceId, instanceNotificationExecutor); + FragmentInstanceContext fragmentInstanceContext = + createFragmentInstanceContext(instanceId, stateMachine); + PlanNodeId planNodeId = new PlanNodeId("1"); + fragmentInstanceContext.addOperatorContext( + 1, planNodeId, AlignedSeriesScanOperator.class.getSimpleName()); + + AlignedSeriesScanOperator seriesScanOperator = + new AlignedSeriesScanOperator( + planNodeId, + alignedPath, + fragmentInstanceContext.getOperatorContexts().get(0), + null, + null, + true); + seriesScanOperator.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + int count = 0; + while (seriesScanOperator.hasNext()) { + TsBlock tsBlock = seriesScanOperator.next(); + assertEquals(6, tsBlock.getValueColumnCount()); + assertTrue(tsBlock.getColumn(0) instanceof BooleanColumn); + assertTrue(tsBlock.getColumn(1) instanceof IntColumn); + assertTrue(tsBlock.getColumn(2) instanceof LongColumn); + assertTrue(tsBlock.getColumn(3) instanceof FloatColumn); + assertTrue(tsBlock.getColumn(4) instanceof DoubleColumn); + assertTrue(tsBlock.getColumn(5) instanceof BinaryColumn); + + assertEquals(20, tsBlock.getPositionCount()); + for (int i = 0; i < tsBlock.getPositionCount(); i++) { + long expectedTime = i + 20L * count; + assertEquals(expectedTime, tsBlock.getTimeByIndex(i)); + int delta = 0; + if (expectedTime < 200) { + delta = 20000; + } else if (expectedTime < 260 + || (expectedTime >= 300 && expectedTime < 380) + || expectedTime >= 400) { + delta = 10000; + } + assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(0).getBoolean(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(1).getInt(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(2).getLong(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(3).getFloat(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(4).getDouble(i), DELTA); + assertEquals( + String.valueOf(delta + expectedTime), tsBlock.getColumn(5).getBinary(i).toString()); + } + count++; + } + assertEquals(25, count); + } catch (IllegalPathException e) { + e.printStackTrace(); + fail(); + } finally { + instanceNotificationExecutor.shutdown(); + } + } + + @Test + public void batchTest2() { + ExecutorService instanceNotificationExecutor = + IoTDBThreadPoolFactory.newFixedThreadPool(1, "test-instance-notification"); + try { + AlignedPath alignedPath1 = + new AlignedPath( + SERIES_SCAN_OPERATOR_TEST_SG + ".device0", + measurementSchemas.stream() + .map(MeasurementSchema::getMeasurementId) + .collect(Collectors.toList()), + measurementSchemas.stream() + .map(m -> (IMeasurementSchema) m) + .collect(Collectors.toList())); + QueryId queryId = new QueryId("stub_query"); + FragmentInstanceId instanceId = + new FragmentInstanceId(new PlanFragmentId(queryId, 0), "stub-instance"); + FragmentInstanceStateMachine stateMachine = + new FragmentInstanceStateMachine(instanceId, instanceNotificationExecutor); + FragmentInstanceContext fragmentInstanceContext = + createFragmentInstanceContext(instanceId, stateMachine); + PlanNodeId planNodeId1 = new PlanNodeId("1"); + fragmentInstanceContext.addOperatorContext( + 1, planNodeId1, AlignedSeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId2 = new PlanNodeId("2"); + fragmentInstanceContext.addOperatorContext( + 2, planNodeId2, AlignedSeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId3 = new PlanNodeId("3"); + fragmentInstanceContext.addOperatorContext( + 3, planNodeId3, SeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId4 = new PlanNodeId("4"); + fragmentInstanceContext.addOperatorContext( + 4, planNodeId4, SeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId5 = new PlanNodeId("5"); + fragmentInstanceContext.addOperatorContext( + 5, planNodeId5, SeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId6 = new PlanNodeId("6"); + fragmentInstanceContext.addOperatorContext( + 6, planNodeId6, SeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId7 = new PlanNodeId("7"); + fragmentInstanceContext.addOperatorContext( + 7, planNodeId7, SeriesScanOperator.class.getSimpleName()); + PlanNodeId planNodeId8 = new PlanNodeId("8"); + fragmentInstanceContext.addOperatorContext( + 8, planNodeId8, SeriesScanOperator.class.getSimpleName()); + fragmentInstanceContext.addOperatorContext( + 9, new PlanNodeId("9"), TimeJoinOperator.class.getSimpleName()); + AlignedSeriesScanOperator seriesScanOperator1 = + new AlignedSeriesScanOperator( + planNodeId1, + alignedPath1, + fragmentInstanceContext.getOperatorContexts().get(0), + null, + null, + true); + seriesScanOperator1.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + AlignedPath alignedPath2 = + new AlignedPath( + SERIES_SCAN_OPERATOR_TEST_SG + ".device1", + measurementSchemas.stream() + .map(MeasurementSchema::getMeasurementId) + .collect(Collectors.toList()), + measurementSchemas.stream() + .map(m -> (IMeasurementSchema) m) + .collect(Collectors.toList())); + AlignedSeriesScanOperator seriesScanOperator2 = + new AlignedSeriesScanOperator( + planNodeId2, + alignedPath2, + fragmentInstanceContext.getOperatorContexts().get(1), + null, + null, + true); + seriesScanOperator2.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + Set<String> allSensors = new HashSet<>(); + allSensors.add("sensor0"); + allSensors.add("sensor1"); + allSensors.add("sensor2"); + allSensors.add("sensor3"); + allSensors.add("sensor4"); + allSensors.add("sensor5"); + + MeasurementPath measurementPath3 = + new MeasurementPath( + SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor0", TSDataType.BOOLEAN); + SeriesScanOperator seriesScanOperator3 = + new SeriesScanOperator( + planNodeId3, + measurementPath3, + allSensors, + TSDataType.BOOLEAN, + fragmentInstanceContext.getOperatorContexts().get(2), + null, + null, + true); + seriesScanOperator3.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + MeasurementPath measurementPath4 = + new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor1", TSDataType.INT32); + SeriesScanOperator seriesScanOperator4 = + new SeriesScanOperator( + planNodeId4, + measurementPath4, + allSensors, + TSDataType.INT32, + fragmentInstanceContext.getOperatorContexts().get(3), + null, + null, + true); + seriesScanOperator4.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + MeasurementPath measurementPath5 = + new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor2", TSDataType.INT64); + SeriesScanOperator seriesScanOperator5 = + new SeriesScanOperator( + planNodeId5, + measurementPath5, + allSensors, + TSDataType.INT64, + fragmentInstanceContext.getOperatorContexts().get(4), + null, + null, + true); + seriesScanOperator5.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + MeasurementPath measurementPath6 = + new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor3", TSDataType.FLOAT); + SeriesScanOperator seriesScanOperator6 = + new SeriesScanOperator( + planNodeId6, + measurementPath6, + allSensors, + TSDataType.FLOAT, + fragmentInstanceContext.getOperatorContexts().get(5), + null, + null, + true); + seriesScanOperator6.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + MeasurementPath measurementPath7 = + new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor4", TSDataType.DOUBLE); + SeriesScanOperator seriesScanOperator7 = + new SeriesScanOperator( + planNodeId7, + measurementPath7, + allSensors, + TSDataType.DOUBLE, + fragmentInstanceContext.getOperatorContexts().get(6), + null, + null, + true); + seriesScanOperator7.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + MeasurementPath measurementPath8 = + new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor5", TSDataType.DOUBLE); + SeriesScanOperator seriesScanOperator8 = + new SeriesScanOperator( + planNodeId8, + measurementPath8, + allSensors, + TSDataType.TEXT, + fragmentInstanceContext.getOperatorContexts().get(7), + null, + null, + true); + seriesScanOperator8.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); + + TimeJoinOperator timeJoinOperator = + new TimeJoinOperator( + fragmentInstanceContext.getOperatorContexts().get(8), + Arrays.asList( + seriesScanOperator1, + seriesScanOperator2, + seriesScanOperator3, + seriesScanOperator4, + seriesScanOperator5, + seriesScanOperator6, + seriesScanOperator7, + seriesScanOperator8), + OrderBy.TIMESTAMP_ASC, + Arrays.asList( + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT, + TSDataType.BOOLEAN, + TSDataType.INT32, + TSDataType.INT64, + TSDataType.FLOAT, + TSDataType.DOUBLE, + TSDataType.TEXT), + Arrays.asList( + new SingleColumnMerger(new InputLocation(0, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(0, 1), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(0, 2), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(0, 3), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(0, 4), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(0, 5), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 1), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 2), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 3), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 4), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(1, 5), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(2, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(3, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(4, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(5, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(6, 0), new AscTimeComparator()), + new SingleColumnMerger(new InputLocation(7, 0), new AscTimeComparator())), + new AscTimeComparator()); + int count = 0; + while (timeJoinOperator.hasNext()) { + TsBlock tsBlock = timeJoinOperator.next(); + assertEquals(18, tsBlock.getValueColumnCount()); + assertTrue(tsBlock.getColumn(0) instanceof BooleanColumn); + assertTrue(tsBlock.getColumn(1) instanceof IntColumn); + assertTrue(tsBlock.getColumn(2) instanceof LongColumn); + assertTrue(tsBlock.getColumn(3) instanceof FloatColumn); + assertTrue(tsBlock.getColumn(4) instanceof DoubleColumn); + assertTrue(tsBlock.getColumn(5) instanceof BinaryColumn); + assertTrue(tsBlock.getColumn(6) instanceof BooleanColumn); + assertTrue(tsBlock.getColumn(7) instanceof IntColumn); + assertTrue(tsBlock.getColumn(8) instanceof LongColumn); + assertTrue(tsBlock.getColumn(9) instanceof FloatColumn); + assertTrue(tsBlock.getColumn(10) instanceof DoubleColumn); + assertTrue(tsBlock.getColumn(11) instanceof BinaryColumn); + assertTrue(tsBlock.getColumn(12) instanceof BooleanColumn); + assertTrue(tsBlock.getColumn(13) instanceof IntColumn); + assertTrue(tsBlock.getColumn(14) instanceof LongColumn); + assertTrue(tsBlock.getColumn(15) instanceof FloatColumn); + assertTrue(tsBlock.getColumn(16) instanceof DoubleColumn); + assertTrue(tsBlock.getColumn(17) instanceof BinaryColumn); + + assertEquals(20, tsBlock.getPositionCount()); + for (int i = 0; i < tsBlock.getPositionCount(); i++) { + long expectedTime = i + 20L * count; + assertEquals(expectedTime, tsBlock.getTimeByIndex(i)); + int delta = 0; + if (expectedTime < 200) { + delta = 20000; + } else if (expectedTime < 260 + || (expectedTime >= 300 && expectedTime < 380) + || expectedTime >= 400) { + delta = 10000; + } + assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(0).getBoolean(i)); + assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(6).getBoolean(i)); + assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(12).getBoolean(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(1).getInt(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(7).getInt(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(13).getInt(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(2).getLong(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(8).getLong(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(14).getLong(i)); + assertEquals(delta + expectedTime, tsBlock.getColumn(3).getFloat(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(9).getFloat(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(15).getFloat(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(4).getDouble(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(10).getDouble(i), DELTA); + assertEquals(delta + expectedTime, tsBlock.getColumn(16).getDouble(i), DELTA); + assertEquals( + String.valueOf(delta + expectedTime), tsBlock.getColumn(5).getBinary(i).toString()); + assertEquals( + String.valueOf(delta + expectedTime), tsBlock.getColumn(11).getBinary(i).toString()); + assertEquals( + String.valueOf(delta + expectedTime), tsBlock.getColumn(17).getBinary(i).toString()); + } + count++; + } + assertEquals(25, count); + } catch (IllegalPathException e) { + e.printStackTrace(); + fail(); + } finally { + instanceNotificationExecutor.shutdown(); + } + } ++ ++ /** order by time desc */ ++ @Test ++ public void batchTest3() { ++ ExecutorService instanceNotificationExecutor = ++ IoTDBThreadPoolFactory.newFixedThreadPool(1, "test-instance-notification"); ++ try { ++ AlignedPath alignedPath1 = ++ new AlignedPath( ++ SERIES_SCAN_OPERATOR_TEST_SG + ".device0", ++ measurementSchemas.stream() ++ .map(MeasurementSchema::getMeasurementId) ++ .collect(Collectors.toList()), ++ measurementSchemas.stream() ++ .map(m -> (IMeasurementSchema) m) ++ .collect(Collectors.toList())); ++ QueryId queryId = new QueryId("stub_query"); ++ FragmentInstanceId instanceId = ++ new FragmentInstanceId(new PlanFragmentId(queryId, 0), "stub-instance"); ++ FragmentInstanceStateMachine stateMachine = ++ new FragmentInstanceStateMachine(instanceId, instanceNotificationExecutor); ++ FragmentInstanceContext fragmentInstanceContext = ++ createFragmentInstanceContext(instanceId, stateMachine); ++ PlanNodeId planNodeId1 = new PlanNodeId("1"); ++ fragmentInstanceContext.addOperatorContext( ++ 1, planNodeId1, AlignedSeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId2 = new PlanNodeId("2"); ++ fragmentInstanceContext.addOperatorContext( ++ 2, planNodeId2, AlignedSeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId3 = new PlanNodeId("3"); ++ fragmentInstanceContext.addOperatorContext( ++ 3, planNodeId3, SeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId4 = new PlanNodeId("4"); ++ fragmentInstanceContext.addOperatorContext( ++ 4, planNodeId4, SeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId5 = new PlanNodeId("5"); ++ fragmentInstanceContext.addOperatorContext( ++ 5, planNodeId5, SeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId6 = new PlanNodeId("6"); ++ fragmentInstanceContext.addOperatorContext( ++ 6, planNodeId6, SeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId7 = new PlanNodeId("7"); ++ fragmentInstanceContext.addOperatorContext( ++ 7, planNodeId7, SeriesScanOperator.class.getSimpleName()); ++ PlanNodeId planNodeId8 = new PlanNodeId("8"); ++ fragmentInstanceContext.addOperatorContext( ++ 8, planNodeId8, SeriesScanOperator.class.getSimpleName()); ++ fragmentInstanceContext.addOperatorContext( ++ 9, new PlanNodeId("9"), TimeJoinOperator.class.getSimpleName()); ++ AlignedSeriesScanOperator seriesScanOperator1 = ++ new AlignedSeriesScanOperator( ++ planNodeId1, ++ alignedPath1, ++ fragmentInstanceContext.getOperatorContexts().get(0), ++ null, ++ null, ++ false); ++ seriesScanOperator1.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ AlignedPath alignedPath2 = ++ new AlignedPath( ++ SERIES_SCAN_OPERATOR_TEST_SG + ".device1", ++ measurementSchemas.stream() ++ .map(MeasurementSchema::getMeasurementId) ++ .collect(Collectors.toList()), ++ measurementSchemas.stream() ++ .map(m -> (IMeasurementSchema) m) ++ .collect(Collectors.toList())); ++ AlignedSeriesScanOperator seriesScanOperator2 = ++ new AlignedSeriesScanOperator( ++ planNodeId2, ++ alignedPath2, ++ fragmentInstanceContext.getOperatorContexts().get(1), ++ null, ++ null, ++ false); ++ seriesScanOperator2.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ Set<String> allSensors = new HashSet<>(); ++ allSensors.add("sensor0"); ++ allSensors.add("sensor1"); ++ allSensors.add("sensor2"); ++ allSensors.add("sensor3"); ++ allSensors.add("sensor4"); ++ allSensors.add("sensor5"); ++ ++ MeasurementPath measurementPath3 = ++ new MeasurementPath( ++ SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor0", TSDataType.BOOLEAN); ++ SeriesScanOperator seriesScanOperator3 = ++ new SeriesScanOperator( ++ planNodeId3, ++ measurementPath3, ++ allSensors, ++ TSDataType.BOOLEAN, ++ fragmentInstanceContext.getOperatorContexts().get(2), ++ null, ++ null, ++ false); ++ seriesScanOperator3.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ MeasurementPath measurementPath4 = ++ new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor1", TSDataType.INT32); ++ SeriesScanOperator seriesScanOperator4 = ++ new SeriesScanOperator( ++ planNodeId4, ++ measurementPath4, ++ allSensors, ++ TSDataType.INT32, ++ fragmentInstanceContext.getOperatorContexts().get(3), ++ null, ++ null, ++ false); ++ seriesScanOperator4.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ MeasurementPath measurementPath5 = ++ new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor2", TSDataType.INT64); ++ SeriesScanOperator seriesScanOperator5 = ++ new SeriesScanOperator( ++ planNodeId5, ++ measurementPath5, ++ allSensors, ++ TSDataType.INT64, ++ fragmentInstanceContext.getOperatorContexts().get(4), ++ null, ++ null, ++ false); ++ seriesScanOperator5.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ MeasurementPath measurementPath6 = ++ new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor3", TSDataType.FLOAT); ++ SeriesScanOperator seriesScanOperator6 = ++ new SeriesScanOperator( ++ planNodeId6, ++ measurementPath6, ++ allSensors, ++ TSDataType.FLOAT, ++ fragmentInstanceContext.getOperatorContexts().get(5), ++ null, ++ null, ++ false); ++ seriesScanOperator6.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ MeasurementPath measurementPath7 = ++ new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor4", TSDataType.DOUBLE); ++ SeriesScanOperator seriesScanOperator7 = ++ new SeriesScanOperator( ++ planNodeId7, ++ measurementPath7, ++ allSensors, ++ TSDataType.DOUBLE, ++ fragmentInstanceContext.getOperatorContexts().get(6), ++ null, ++ null, ++ false); ++ seriesScanOperator7.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ MeasurementPath measurementPath8 = ++ new MeasurementPath(SERIES_SCAN_OPERATOR_TEST_SG + ".device2.sensor5", TSDataType.DOUBLE); ++ SeriesScanOperator seriesScanOperator8 = ++ new SeriesScanOperator( ++ planNodeId8, ++ measurementPath8, ++ allSensors, ++ TSDataType.TEXT, ++ fragmentInstanceContext.getOperatorContexts().get(7), ++ null, ++ null, ++ false); ++ seriesScanOperator8.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources)); ++ ++ TimeJoinOperator timeJoinOperator = ++ new TimeJoinOperator( ++ fragmentInstanceContext.getOperatorContexts().get(8), ++ Arrays.asList( ++ seriesScanOperator1, ++ seriesScanOperator2, ++ seriesScanOperator3, ++ seriesScanOperator4, ++ seriesScanOperator5, ++ seriesScanOperator6, ++ seriesScanOperator7, ++ seriesScanOperator8), ++ OrderBy.TIMESTAMP_DESC, ++ Arrays.asList( ++ TSDataType.BOOLEAN, ++ TSDataType.INT32, ++ TSDataType.INT64, ++ TSDataType.FLOAT, ++ TSDataType.DOUBLE, ++ TSDataType.TEXT, ++ TSDataType.BOOLEAN, ++ TSDataType.INT32, ++ TSDataType.INT64, ++ TSDataType.FLOAT, ++ TSDataType.DOUBLE, ++ TSDataType.TEXT, ++ TSDataType.BOOLEAN, ++ TSDataType.INT32, ++ TSDataType.INT64, ++ TSDataType.FLOAT, ++ TSDataType.DOUBLE, ++ TSDataType.TEXT), ++ Arrays.asList( ++ new SingleColumnMerger(new InputLocation(0, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(0, 1), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(0, 2), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(0, 3), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(0, 4), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(0, 5), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 1), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 2), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 3), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 4), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(1, 5), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(2, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(3, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(4, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(5, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(6, 0), new DescTimeComparator()), ++ new SingleColumnMerger(new InputLocation(7, 0), new DescTimeComparator())), ++ new DescTimeComparator()); ++ ++ int count = 25; ++ while (timeJoinOperator.hasNext()) { ++ TsBlock tsBlock = timeJoinOperator.next(); ++ assertEquals(18, tsBlock.getValueColumnCount()); ++ assertTrue(tsBlock.getColumn(0) instanceof BooleanColumn); ++ assertTrue(tsBlock.getColumn(1) instanceof IntColumn); ++ assertTrue(tsBlock.getColumn(2) instanceof LongColumn); ++ assertTrue(tsBlock.getColumn(3) instanceof FloatColumn); ++ assertTrue(tsBlock.getColumn(4) instanceof DoubleColumn); ++ assertTrue(tsBlock.getColumn(5) instanceof BinaryColumn); ++ assertTrue(tsBlock.getColumn(6) instanceof BooleanColumn); ++ assertTrue(tsBlock.getColumn(7) instanceof IntColumn); ++ assertTrue(tsBlock.getColumn(8) instanceof LongColumn); ++ assertTrue(tsBlock.getColumn(9) instanceof FloatColumn); ++ assertTrue(tsBlock.getColumn(10) instanceof DoubleColumn); ++ assertTrue(tsBlock.getColumn(11) instanceof BinaryColumn); ++ assertTrue(tsBlock.getColumn(12) instanceof BooleanColumn); ++ assertTrue(tsBlock.getColumn(13) instanceof IntColumn); ++ assertTrue(tsBlock.getColumn(14) instanceof LongColumn); ++ assertTrue(tsBlock.getColumn(15) instanceof FloatColumn); ++ assertTrue(tsBlock.getColumn(16) instanceof DoubleColumn); ++ assertTrue(tsBlock.getColumn(17) instanceof BinaryColumn); ++ ++ assertEquals(20, tsBlock.getPositionCount()); ++ for (int i = 0; i < tsBlock.getPositionCount(); i++) { ++ long expectedTime = tsBlock.getPositionCount() - i - 1 + 20L * (count - 1); ++ assertEquals(expectedTime, tsBlock.getTimeByIndex(i)); ++ int delta = 0; ++ if (expectedTime < 200) { ++ delta = 20000; ++ } else if (expectedTime < 260 ++ || (expectedTime >= 300 && expectedTime < 380) ++ || expectedTime >= 400) { ++ delta = 10000; ++ } ++ assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(0).getBoolean(i)); ++ assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(6).getBoolean(i)); ++ assertEquals((delta + expectedTime) % 2 == 0, tsBlock.getColumn(12).getBoolean(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(1).getInt(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(7).getInt(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(13).getInt(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(2).getLong(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(8).getLong(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(14).getLong(i)); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(3).getFloat(i), DELTA); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(9).getFloat(i), DELTA); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(15).getFloat(i), DELTA); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(4).getDouble(i), DELTA); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(10).getDouble(i), DELTA); ++ assertEquals(delta + expectedTime, tsBlock.getColumn(16).getDouble(i), DELTA); ++ assertEquals( ++ String.valueOf(delta + expectedTime), tsBlock.getColumn(5).getBinary(i).toString()); ++ assertEquals( ++ String.valueOf(delta + expectedTime), tsBlock.getColumn(11).getBinary(i).toString()); ++ assertEquals( ++ String.valueOf(delta + expectedTime), tsBlock.getColumn(17).getBinary(i).toString()); ++ } ++ count--; ++ } ++ assertEquals(0, count); ++ } catch (IllegalPathException e) { ++ e.printStackTrace(); ++ fail(); ++ } finally { ++ instanceNotificationExecutor.shutdown(); ++ } ++ } +} diff --cc server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesTestUtil.java index 32ea855b57,0000000000..681e818223 mode 100644,000000..100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesTestUtil.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/execution/operator/AlignedSeriesTestUtil.java @@@ -1,260 -1,0 +1,260 @@@ +/* + * 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.mpp.execution.operator; + ++import org.apache.iotdb.commons.exception.MetadataException; ++import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.constant.TestConstant; +import org.apache.iotdb.db.engine.cache.ChunkCache; +import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache; +import org.apache.iotdb.db.engine.storagegroup.TsFileResource; +import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; - import org.apache.iotdb.db.exception.metadata.MetadataException; - import org.apache.iotdb.db.metadata.path.PartialPath; +import org.apache.iotdb.db.query.control.FileReaderManager; +import org.apache.iotdb.db.service.IoTDB; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.tsfile.exception.write.WriteProcessException; +import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.read.common.Path; +import org.apache.iotdb.tsfile.write.TsFileWriter; +import org.apache.iotdb.tsfile.write.record.TSRecord; +import org.apache.iotdb.tsfile.write.record.datapoint.DataPoint; +import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; + +import org.junit.Assert; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_SEPARATOR; + +/** + * This util contains 5 seqFiles and 5 unseqFiles in default. + * + * <p>Sequence time range of data: [0, 99], [100, 199], [200, 299], [300, 399], [400, 499] + * + * <p>UnSequence time range of data: [0, 19], [100, 139], [200, 259], [300, 379], [400, 499], [0, + * 199] + * + * <p>d0 and d1 are aligned, d2 is nonAligned + */ +public class AlignedSeriesTestUtil { + + public static void setUp( + List<MeasurementSchema> measurementSchemas, + List<TsFileResource> seqResources, + List<TsFileResource> unseqResources, + String sgName) + throws MetadataException, IOException, WriteProcessException { + IoTDB.configManager.init(); + prepareSeries(measurementSchemas, sgName); + prepareFiles(seqResources, unseqResources, measurementSchemas, sgName); + } + + public static void tearDown( + List<TsFileResource> seqResources, List<TsFileResource> unseqResources) throws IOException { + removeFiles(seqResources, unseqResources); + seqResources.clear(); + unseqResources.clear(); + ChunkCache.getInstance().clear(); + TimeSeriesMetadataCache.getInstance().clear(); + IoTDB.configManager.clear(); + EnvironmentUtils.cleanAllDir(); + } + + private static void prepareFiles( + List<TsFileResource> seqResources, + List<TsFileResource> unseqResources, + List<MeasurementSchema> measurementSchemas, + String sgName) + throws IOException, WriteProcessException { + int seqFileNum = 5; + long ptNum = 100; + for (int i = 0; i < seqFileNum; i++) { + File file = new File(TestConstant.getTestTsFilePath(sgName, 0, 0, i)); + TsFileResource tsFileResource = new TsFileResource(file); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); + tsFileResource.setMinPlanIndex(i); + tsFileResource.setMaxPlanIndex(i); + tsFileResource.setVersion(i); + seqResources.add(tsFileResource); + prepareFile(sgName, tsFileResource, i * ptNum, ptNum, 0, measurementSchemas); + } + int unseqFileNum = 5; + for (int i = 0; i < unseqFileNum; i++) { + File file = new File(TestConstant.getTestTsFilePath(sgName, 0, 0, i + seqFileNum)); + TsFileResource tsFileResource = new TsFileResource(file); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); + tsFileResource.setMinPlanIndex(i + seqFileNum); + tsFileResource.setMaxPlanIndex(i + seqFileNum); + tsFileResource.setVersion(i + seqFileNum); + unseqResources.add(tsFileResource); + prepareFile( + sgName, + tsFileResource, + i * ptNum, + ptNum * (i + 1) / unseqFileNum, + 10000, + measurementSchemas); + } + + File file = new File(TestConstant.getTestTsFilePath(sgName, 0, 0, seqFileNum + unseqFileNum)); + TsFileResource tsFileResource = new TsFileResource(file); + tsFileResource.setStatus(TsFileResourceStatus.CLOSED); + tsFileResource.setMinPlanIndex(seqFileNum + unseqFileNum); + tsFileResource.setMaxPlanIndex(seqFileNum + unseqFileNum); + tsFileResource.setVersion(seqFileNum + unseqFileNum); + unseqResources.add(tsFileResource); + prepareFile(sgName, tsFileResource, 0, ptNum * 2, 20000, measurementSchemas); + } + + private static void prepareFile( + String sgName, + TsFileResource tsFileResource, + long timeOffset, + long ptNum, + long valueOffset, + List<MeasurementSchema> measurementSchemas) + throws IOException, WriteProcessException { + File file = tsFileResource.getTsFile(); + if (!file.getParentFile().exists()) { + Assert.assertTrue(file.getParentFile().mkdirs()); + } + TsFileWriter fileWriter = new TsFileWriter(file); + + String device0 = sgName + PATH_SEPARATOR + "device0"; + String device1 = sgName + PATH_SEPARATOR + "device1"; + String device2 = sgName + PATH_SEPARATOR + "device2"; + + fileWriter.registerAlignedTimeseries(new Path(device0), measurementSchemas); + fileWriter.registerAlignedTimeseries(new Path(device1), measurementSchemas); + fileWriter.registerTimeseries(new Path(device2), measurementSchemas); + for (long i = timeOffset; i < timeOffset + ptNum; i++) { + + TSRecord record = new TSRecord(i, device0); + int index = 0; + for (MeasurementSchema measurementSchema : measurementSchemas) { + record.addTuple( + DataPoint.getDataPoint( + measurementSchema.getType(), + measurementSchema.getMeasurementId(), + index == 0 + ? String.valueOf((i + valueOffset) % 2 == 0) + : String.valueOf((i + valueOffset)))); + index++; + } + fileWriter.writeAligned(record); + tsFileResource.updateStartTime(device0, i); + tsFileResource.updateEndTime(device0, i); + + record.deviceId = device1; + fileWriter.writeAligned(record); + tsFileResource.updateStartTime(device1, i); + tsFileResource.updateEndTime(device1, i); + + record.deviceId = device2; + fileWriter.write(record); + tsFileResource.updateStartTime(device2, i); + tsFileResource.updateEndTime(device2, i); + + long flushInterval = 20; + if ((i + 1) % flushInterval == 0) { + fileWriter.flushAllChunkGroups(); + } + } + fileWriter.close(); + } + + private static void prepareSeries(List<MeasurementSchema> measurementSchemas, String sgName) + throws MetadataException { + + measurementSchemas.add( + new MeasurementSchema( + "sensor0", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY)); + measurementSchemas.add( + new MeasurementSchema("sensor1", TSDataType.INT32, TSEncoding.RLE, CompressionType.SNAPPY)); + measurementSchemas.add( + new MeasurementSchema( + "sensor2", TSDataType.INT64, TSEncoding.TS_2DIFF, CompressionType.SNAPPY)); + measurementSchemas.add( + new MeasurementSchema( + "sensor3", TSDataType.FLOAT, TSEncoding.GORILLA, CompressionType.SNAPPY)); + measurementSchemas.add( + new MeasurementSchema( + "sensor4", TSDataType.DOUBLE, TSEncoding.GORILLA, CompressionType.SNAPPY)); + measurementSchemas.add( + new MeasurementSchema( + "sensor5", TSDataType.TEXT, TSEncoding.PLAIN, CompressionType.SNAPPY)); + + IoTDB.schemaProcessor.setStorageGroup(new PartialPath(sgName)); + IoTDB.schemaProcessor.createAlignedTimeSeries( + new PartialPath(sgName + PATH_SEPARATOR + "device0"), + measurementSchemas.stream() + .map(MeasurementSchema::getMeasurementId) + .collect(Collectors.toList()), + measurementSchemas.stream().map(MeasurementSchema::getType).collect(Collectors.toList()), + measurementSchemas.stream() + .map(MeasurementSchema::getEncodingType) + .collect(Collectors.toList()), + measurementSchemas.stream() + .map(MeasurementSchema::getCompressor) + .collect(Collectors.toList())); + IoTDB.schemaProcessor.createAlignedTimeSeries( + new PartialPath(sgName + PATH_SEPARATOR + "device1"), + measurementSchemas.stream() + .map(MeasurementSchema::getMeasurementId) + .collect(Collectors.toList()), + measurementSchemas.stream().map(MeasurementSchema::getType).collect(Collectors.toList()), + measurementSchemas.stream() + .map(MeasurementSchema::getEncodingType) + .collect(Collectors.toList()), + measurementSchemas.stream() + .map(MeasurementSchema::getCompressor) + .collect(Collectors.toList())); + for (MeasurementSchema measurementSchema : measurementSchemas) { + IoTDB.schemaProcessor.createTimeseries( + new PartialPath( + sgName + + PATH_SEPARATOR + + "device2" + + PATH_SEPARATOR + + measurementSchema.getMeasurementId()), + measurementSchema.getType(), + measurementSchema.getEncodingType(), + measurementSchema.getCompressor(), + Collections.emptyMap()); + } + } + + private static void removeFiles( + List<TsFileResource> seqResources, List<TsFileResource> unseqResources) throws IOException { + for (TsFileResource tsFileResource : seqResources) { + tsFileResource.remove(); + } + for (TsFileResource tsFileResource : unseqResources) { + tsFileResource.remove(); + } + + FileReaderManager.getInstance().closeAndRemoveAllOpenedReaders(); + } +}
