You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/05/04 08:56:29 UTC
[iotdb] 01/01: resolve conflicts and add desc test
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 <ja...@gmail.com>
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();
+ }
+}