You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/05/02 09:36:50 UTC

[iotdb] branch memtsblock created (now e66a4d5c73)

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

haonan pushed a change to branch memtsblock
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at e66a4d5c73 roundWithGivenPrecision

This branch includes the following new commits:

     new 178959f32e tvlist -> tsblock
     new 9f5c19dcab Merge branch 'master' of https://github.com/apache/iotdb into memtsblock
     new e66a4d5c73 roundWithGivenPrecision

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 02/03: Merge branch 'master' of https://github.com/apache/iotdb into memtsblock

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9f5c19dcabdf2712f9f5ac901bd1d398ec68f3b5
Merge: 178959f32e a4a8656cec
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon May 2 14:56:17 2022 +0800

    Merge branch 'master' of https://github.com/apache/iotdb into memtsblock

 README.md                                          |   2 +-
 README_ZH.md                                       |   2 +-
 .../apache/iotdb/db/qp/sql/InfluxDBSqlParser.g4    |   9 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   | 138 ++--
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |  15 +-
 .../iotdb/cluster/metadata/CSchemaProcessor.java   |   6 +-
 .../cluster/query/ClusterDataQueryExecutor.java    |   6 +-
 .../query/aggregate/ClusterAggregateExecutor.java  |   2 +-
 .../cluster/query/fill/ClusterFillExecutor.java    |   2 +-
 .../groupby/ClusterGroupByVFilterDataSet.java      |   2 +-
 .../cluster/query/reader/ClusterReaderFactory.java |   3 +-
 .../cluster/query/reader/ClusterTimeGenerator.java |   4 +-
 .../cluster/log/snapshot/FileSnapshotTest.java     |  20 +-
 .../log/snapshot/PartitionedSnapshotTest.java      |   6 +-
 .../cluster/log/snapshot/PullSnapshotTaskTest.java |   2 +-
 .../src/assembly/resources/sbin/stop-confignode.sh |  15 +-
 .../confignode/manager/ClusterSchemaManager.java   |   3 +-
 .../iotdb/confignode/manager/ConfigManager.java    |  13 +-
 .../apache/iotdb/confignode/manager/Manager.java   |  12 +
 .../confignode/manager/PermissionManager.java      |  11 +
 .../iotdb/confignode/persistence/AuthorInfo.java   | 128 +++-
 .../confignode/persistence/ClusterSchemaInfo.java  |  10 +
 .../iotdb/confignode/persistence/DataNodeInfo.java |  14 +-
 .../confignode/persistence/PartitionInfo.java      |  23 +-
 .../iotdb/confignode/service/ConfigNode.java       |  27 +-
 .../thrift/ConfigNodeRPCServiceProcessor.java      |   7 +
 .../thrift/ConfigNodeRPCServiceProcessorTest.java  |  22 +
 .../utils/ConfigNodeEnvironmentUtils.java          | 134 ----
 .../consensus/standalone/StandAloneConsensus.java  |  50 +-
 .../iotdb/consensus/standalone/RecoveryTest.java   |  94 +++
 .../standalone/StandAloneConsensusTest.java        |   4 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |  35 +-
 docs/UserGuide/Process-Data/Triggers.md            |   9 +-
 docs/UserGuide/Query-Data/Select-Expression.md     |  74 ++
 docs/UserGuide/Query-Data/Without-Null.md          |   8 +-
 docs/UserGuide/Reference/Syntax-Conventions.md     | 453 ++++++++---
 .../Data-Concept/Data-Model-and-Terminology.md     |  30 +-
 docs/zh/UserGuide/Process-Data/Triggers.md         |   7 +-
 docs/zh/UserGuide/Query-Data/Select-Expression.md  |  76 ++
 docs/zh/UserGuide/Query-Data/Without-Null.md       |   8 +-
 docs/zh/UserGuide/Reference/Syntax-Conventions.md  | 492 +++++++++---
 .../org/apache/iotdb/DataMigrationExample.java     |   2 +-
 grafana-plugin/pkg/plugin/plugin.go                |  77 +-
 grafana-plugin/src/QueryEditor.tsx                 | 295 +++++++-
 .../{WhereValue.tsx => AggregateFun.tsx}           |  40 +-
 .../componments/{WhereValue.tsx => FillValue.tsx}  |   8 +-
 grafana-plugin/src/componments/GroupBy.tsx         |  58 ++
 grafana-plugin/src/componments/SelectValue.tsx     |   1 +
 grafana-plugin/src/componments/TimeSeries.tsx      |  82 ++
 grafana-plugin/src/componments/WhereValue.tsx      |   1 +
 grafana-plugin/src/datasource.ts                   |  66 +-
 grafana-plugin/src/functions.ts                    |   3 +-
 grafana-plugin/src/types.ts                        |  30 +-
 .../apache/iotdb/db/integration/IoTDBAliasIT.java  |   2 +-
 .../org/apache/iotdb/db/integration/IoTDBAsIT.java |   2 +-
 .../db/integration/IoTDBCreateTimeseriesIT.java    |  18 +-
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  16 +-
 .../iotdb/db/integration/IoTDBExecuteBatchIT.java  |   6 +-
 .../db/integration/IoTDBFloatPrecisionIT.java      |   2 +-
 .../iotdb/db/integration/IoTDBInsertNaNIT.java     |   2 +-
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |   8 +-
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |  25 +
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  24 +-
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   |  29 +-
 .../integration/IoTDBSortedShowTimeseriesIT.java   |  38 +-
 .../db/integration/IoTDBSyntaxConventionIT.java    | 468 ------------
 .../IoTDBSyntaxConventionIdentifierIT.java         | 838 +++++++++++++++++++++
 .../IoTDBSyntaxConventionStringLiteralIT.java      | 764 +++++++++++++++++++
 .../iotdb/db/integration/IoTDBTagAlterIT.java      |  46 +-
 .../apache/iotdb/db/integration/IoTDBTagIT.java    | 220 ++++--
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java | 138 ++++
 .../aggregation/IoTDBAggregationIT.java            |   5 +
 .../db/integration/aligned/IoTDBDeletionIT.java    |  16 +-
 .../db/integration/sync/IoTDBSyncSenderIT.java     |  56 +-
 .../versionadaption/IoTDBDDLVersionAdaptionIT.java |   6 +-
 .../IoTDBSyntaxConventionVersionAdaptionIT.java    | 100 ---
 .../IoTDBWithoutNullAllFilterIT.java               |  16 +-
 .../IoTDBWithoutNullAnyFilterIT.java               |   8 +-
 .../session/IoTDBSessionSyntaxConventionIT.java    |  39 +-
 .../iotdb/commons/partition/DataPartition.java     |   9 +
 .../iotdb/commons/partition/SchemaPartition.java   |   9 +
 .../apache/iotdb/commons/ClientManagerTest.java    |   7 +-
 openapi/src/main/openapi3/iotdb-rest.yaml          |  23 +
 .../resources/conf/iotdb-engine.properties         |   4 -
 .../org/apache/iotdb/db/auth/AuthorityChecker.java | 138 +++-
 .../db/auth/authorizer/AuthorizerManager.java      |  44 ++
 .../db/auth/authorizer/ClusterAuthorizer.java      |  61 +-
 .../apache/iotdb/db/client/ConfigNodeClient.java   |  16 +
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  11 -
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |   5 -
 .../engine/compaction/CompactionTaskManager.java   |  45 +-
 .../compaction/cross/CrossSpaceCompactionTask.java |   2 +-
 .../compaction/inner/InnerSpaceCompactionTask.java |  34 +-
 .../utils/SingleSeriesCompactionExecutor.java      |   2 +-
 .../impl/ReadPointCompactionPerformer.java         |   5 +-
 .../compaction/task/AbstractCompactionTask.java    |  19 +-
 .../compaction/task/CompactionTaskSummary.java}    |  17 +-
 .../iotdb/db/engine/modification/Modification.java |   2 +-
 .../selectinto/InsertTabletPlansIterator.java      |   2 +-
 .../iotdb/db/engine/storagegroup/DataRegion.java   |   7 +-
 .../db/engine/storagegroup/TsFileManager.java      |   2 +-
 .../metadata/SeriesOverflowException.java}         |  18 +-
 .../db/metadata/idtable/IDTableHashmapImpl.java    |   9 +-
 .../mtree/store/disk/MTreeFlushTaskManager.java    |   6 +-
 .../mtree/store/disk/MTreeReleaseTaskManager.java  |   3 +-
 .../mtree/store/disk/schemafile/SchemaFile.java    |  73 +-
 .../apache/iotdb/db/metadata/path/AlignedPath.java |  10 +-
 .../iotdb/db/metadata/path/MeasurementPath.java    |  13 +-
 .../apache/iotdb/db/metadata/path/PartialPath.java |  32 +-
 .../db/metadata/schemaregion/SchemaEngine.java     |  73 +-
 .../schemaregion/SchemaRegionMemoryImpl.java       |   9 +-
 .../schemaregion/SchemaRegionSchemaFileImpl.java   |  53 +-
 .../iotdb/db/metadata/utils/MetaFormatUtils.java   |  17 +-
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |  82 +-
 .../db/metadata/utils/ResourceByPathUtils.java     |   9 +-
 .../iotdb/db/mpp/buffer/DataBlockManager.java      | 106 ++-
 .../iotdb/db/mpp/buffer/IDataBlockManager.java     |  24 +-
 .../iotdb/db/mpp/buffer/LocalSinkHandle.java       | 146 ++++
 .../iotdb/db/mpp/buffer/LocalSourceHandle.java     | 125 +++
 .../iotdb/db/mpp/buffer/SharedTsBlockQueue.java    | 152 ++++
 .../apache/iotdb/db/mpp/execution/DataDriver.java  |   2 +-
 .../db/mpp/operator/source/SeriesScanUtil.java     |  23 +-
 .../apache/iotdb/db/mpp/sql/analyze/Analysis.java  |   2 +-
 .../apache/iotdb/db/mpp/sql/parser/ASTVisitor.java | 267 ++++---
 .../db/mpp/sql/planner/DistributionPlanner.java    |  10 +-
 .../iotdb/db/mpp/sql/planner/LogicalPlanner.java   |   2 -
 .../node/metedata/write/AlterTimeSeriesNode.java   |  27 +-
 .../write/CreateAlignedTimeSeriesNode.java         |   7 -
 .../node/metedata/write/CreateTimeSeriesNode.java  |   2 +-
 .../plan/node/source/AlignedSeriesScanNode.java    |  10 +-
 .../planner/plan/node/write/InsertTabletNode.java  |  11 +-
 .../iotdb/db/mpp/sql/statement/Statement.java      |   9 +
 .../sql/statement/component/SelectComponent.java   |   4 +-
 .../statement/crud/AggregationQueryStatement.java  |   4 +-
 .../mpp/sql/statement/crud/FillQueryStatement.java |   1 +
 .../statement/crud/GroupByFillQueryStatement.java  |   1 +
 .../sql/statement/crud/GroupByQueryStatement.java  |   2 +
 .../sql/statement/crud/InsertBaseStatement.java    |   8 +
 .../crud/InsertMultiTabletsStatement.java          |   9 +
 .../mpp/sql/statement/crud/InsertRowStatement.java |  12 +
 .../crud/InsertRowsOfOneDeviceStatement.java       |  11 +
 .../sql/statement/crud/InsertRowsStatement.java    |   9 +
 .../db/mpp/sql/statement/crud/InsertStatement.java |  11 +
 .../sql/statement/crud/InsertTabletStatement.java  |  22 +-
 .../mpp/sql/statement/crud/LastQueryStatement.java |   2 +
 .../db/mpp/sql/statement/crud/QueryStatement.java  |   7 +-
 .../mpp/sql/statement/crud/UDAFQueryStatement.java |   1 +
 .../mpp/sql/statement/crud/UDTFQueryStatement.java |   1 +
 .../metadata/AlterTimeSeriesStatement.java         |   7 +
 .../mpp/sql/statement/metadata/CountStatement.java |   8 +
 .../metadata/CreateAlignedTimeSeriesStatement.java |  20 +
 .../metadata/CreateTimeSeriesStatement.java        |   7 +
 .../statement/metadata/SchemaFetchStatement.java   |   8 +
 .../metadata/SetStorageGroupStatement.java         |  10 +
 .../statement/metadata/ShowDevicesStatement.java   |   8 +
 .../mpp/sql/statement/metadata/ShowStatement.java  |   9 +
 .../metadata/ShowStorageGroupStatement.java        |   8 +
 .../db/mpp/sql/statement/sys/AuthorStatement.java  |  63 +-
 .../db/protocol/influxdb/handler/QueryHandler.java |   2 +-
 .../protocol/rest/handler/QueryDataSetHandler.java |  14 +
 .../protocol/rest/impl/GrafanaApiServiceImpl.java  |  41 +
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |   2 +-
 .../db/qp/physical/crud/AlignByDevicePlan.java     |   2 +-
 .../db/qp/physical/crud/RawDataQueryPlan.java      |   9 +-
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    | 316 ++++----
 .../db/query/control/QueryResourceManager.java     |   6 +-
 .../groupby/GroupByWithValueFilterDataSet.java     |   2 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   2 +-
 .../db/query/executor/AggregationExecutor.java     |   6 +-
 .../iotdb/db/query/executor/FillQueryExecutor.java |   4 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java |   2 +-
 .../db/query/executor/RawDataQueryExecutor.java    |   4 +-
 .../db/query/executor/fill/LastPointReader.java    |   6 +-
 .../expression/binary/AdditionExpression.java      |   4 +-
 .../query/expression/binary/BinaryExpression.java  |   2 +-
 .../expression/binary/DivisionExpression.java      |   4 +-
 .../query/expression/binary/EqualToExpression.java |   4 +-
 .../expression/binary/GreaterEqualExpression.java  |   4 +-
 .../expression/binary/GreaterThanExpression.java   |   4 +-
 .../expression/binary/LessEqualExpression.java     |   4 +-
 .../expression/binary/LessThanExpression.java      |   4 +-
 .../expression/binary/LogicAndExpression.java      |   4 +-
 .../query/expression/binary/LogicOrExpression.java |   4 +-
 .../query/expression/binary/ModuloExpression.java  |   4 +-
 .../binary/MultiplicationExpression.java           |   4 +-
 .../expression/binary/NonEqualExpression.java      |   4 +-
 .../expression/binary/SubtractionExpression.java   |   4 +-
 .../query/expression/multi/FunctionExpression.java |   8 +-
 .../db/query/expression/unary/LikeExpression.java  |  80 +-
 .../query/expression/unary/LogicNotExpression.java |   2 +-
 .../query/expression/unary/NegationExpression.java |   2 +-
 .../query/expression/unary/RegularExpression.java  |   5 +-
 .../iotdb/db/query/reader/series/SeriesReader.java |  18 +-
 .../query/timegenerator/ServerTimeGenerator.java   |   2 +-
 .../db/query/udf/builtin/BuiltinFunction.java      |   4 +-
 .../udf/builtin/UDTFEqualSizeBucketM4Sample.java   |   8 +-
 .../builtin/UDTFEqualSizeBucketOutlierSample.java  | 834 ++++++++++++++++++++
 .../transformer/ArithmeticNegationTransformer.java |  80 --
 .../db/query/udf/core/transformer/Transformer.java |   2 +-
 .../core/transformer/TransparentTransformer.java   |  93 ---
 .../ArithmeticAdditionTransformer.java             |   4 +-
 .../{ => binary}/ArithmeticBinaryTransformer.java  |  14 +-
 .../ArithmeticDivisionTransformer.java             |   4 +-
 .../{ => binary}/ArithmeticModuloTransformer.java  |   4 +-
 .../ArithmeticMultiplicationTransformer.java       |   4 +-
 .../ArithmeticSubtractionTransformer.java          |   4 +-
 .../{ => binary}/BinaryTransformer.java            |  79 +-
 .../{ => binary}/CompareBinaryTransformer.java     |  14 +-
 .../{ => binary}/CompareEqualToTransformer.java    |  24 +-
 .../CompareGreaterEqualTransformer.java            |   4 +-
 .../CompareGreaterThanTransformer.java             |   4 +-
 .../{ => binary}/CompareLessEqualTransformer.java  |   4 +-
 .../{ => binary}/CompareLessThanTransformer.java   |   4 +-
 .../{ => binary}/CompareNonEqualTransformer.java   |  24 +-
 .../{ => binary}/LogicAndTransformer.java          |   5 +-
 .../{ => binary}/LogicBinaryTransformer.java       |  20 +-
 .../{ => binary}/LogicOrTransformer.java           |   4 +-
 .../{ => multi}/UDFQueryRowTransformer.java        |   2 +-
 .../{ => multi}/UDFQueryRowWindowTransformer.java  |   2 +-
 .../{ => multi}/UDFQueryTransformer.java           |   3 +-
 .../ArithmeticNegationTransformer.java}            |  36 +-
 .../udf/core/transformer/unary/InTransformer.java  | 149 ++++
 .../LogicNotTransformer.java}                      |  26 +-
 .../RegularTransformer.java}                       |  35 +-
 .../transformer/unary/TransparentTransformer.java  |  70 ++
 .../UnaryTransformer.java}                         |  34 +-
 .../thrift/impl/DataNodeTSIServiceImpl.java        |  79 +-
 .../db/sync/sender/manager/TsFileSyncManager.java  |  12 -
 .../iotdb/db/sync/sender/pipe/IoTDBPipeSink.java   |   4 +-
 .../iotdb/db/sync/sender/pipe/TsFilePipe.java      |  13 +-
 .../db/sync/sender/recovery/TsFilePipeLogger.java  |   5 +
 .../org/apache/iotdb/db/tools/TsFileSplitTool.java |   2 +-
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |   4 +-
 .../file/UnsealedTsFileRecoverPerformer.java       |   2 +-
 .../compaction/CompactionTaskManagerTest.java      |   2 +-
 .../inner/InnerCompactionEmptyTsFileTest.java      |  89 +++
 .../compaction/inner/InnerCompactionTest.java      |  63 +-
 .../compaction/utils/CompactionCheckerUtils.java   |   2 +-
 .../utils/CompactionFileGeneratorUtils.java        |   6 +-
 .../apache/iotdb/db/metadata/MetaUtilsTest.java    |  71 +-
 .../apache/iotdb/db/metadata/SchemaBasicTest.java  |  24 +-
 .../rocksdb/RocksDBBenchmarkEngine.java            |   2 +-
 .../iotdb/db/mpp/buffer/DataBlockManagerTest.java  | 121 +++
 .../iotdb/db/mpp/buffer/LocalSinkHandleTest.java   | 151 ++++
 .../iotdb/db/mpp/buffer/LocalSourceHandleTest.java | 119 +++
 .../db/mpp/buffer/SharedTsBlockQueueTest.java      | 160 ++++
 .../iotdb/db/mpp/buffer/SourceHandleTest.java      |   2 +-
 .../java/org/apache/iotdb/db/mpp/buffer/Utils.java |   6 +
 .../iotdb/db/mpp/sql/analyze/AnalyzerTest.java     |   2 +-
 .../iotdb/db/mpp/sql/plan/LogicalPlannerTest.java  |  24 +-
 .../iotdb/db/qp/physical/PhysicalPlanTest.java     |   6 +-
 .../iotdb/db/query/dataset/ListDataSetTest.java    |   2 +-
 .../iotdb/db/query/dataset/SingleDataSetTest.java  |   2 +-
 .../query/dataset/groupby/GroupByDataSetTest.java  |   4 +-
 .../dataset/groupby/GroupByLevelDataSetTest.java   |   4 +-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |   4 +
 .../apache/iotdb/spark/tsfile/DefaultSource.scala  |   2 +-
 .../iotdb/spark/tsfile/NarrowConverter.scala       |   2 +-
 .../apache/iotdb/spark/tsfile/WideConverter.scala  |   4 +-
 .../src/main/thrift/confignode.thrift              |   8 +
 .../tsfile/common/constant/TsFileConstant.java     |   1 +
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  10 +-
 .../org/apache/iotdb/tsfile/read/common/Path.java  |   2 +-
 .../read/controller/MetadataQuerierByFileImpl.java |   8 +-
 .../tsfile/v2/read/TsFileSequenceReaderForV2.java  |   7 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |   8 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   2 +-
 .../apache/iotdb/tsfile/read/TsFileReaderTest.java |   2 +-
 .../apache/iotdb/tsfile/read/common/PathTest.java  |  10 +-
 .../org/apache/iotdb/tsfile/write/WriteTest.java   |   6 +-
 270 files changed, 8280 insertions(+), 2548 deletions(-)


[iotdb] 01/03: tvlist -> tsblock

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 178959f32e3ef3ed60f2e7d6ff8af62aad2be078
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon May 2 14:56:09 2022 +0800

    tvlist -> tsblock
---
 .../db/engine/querycontext/ReadOnlyMemChunk.java   | 60 ++++++++++++++++++++--
 .../db/utils/datastructure/AlignedTVList.java      |  7 +++
 .../iotdb/db/utils/datastructure/BinaryTVList.java | 22 ++++++++
 .../db/utils/datastructure/BooleanTVList.java      | 22 ++++++++
 .../iotdb/db/utils/datastructure/DoubleTVList.java | 22 ++++++++
 .../iotdb/db/utils/datastructure/FloatTVList.java  | 22 ++++++++
 .../iotdb/db/utils/datastructure/IntTVList.java    | 22 ++++++++
 .../iotdb/db/utils/datastructure/LongTVList.java   | 22 ++++++++
 .../iotdb/db/utils/datastructure/TVList.java       |  8 +++
 .../read/common/block/column/ColumnBuilder.java    | 38 ++++++++++++--
 .../common/block/column/TimeColumnBuilder.java     | 15 ++++++
 11 files changed, 252 insertions(+), 8 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
index b24313f4f4..40ce93b523 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.engine.querycontext;
 
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.query.reader.chunk.MemChunkLoader;
 import org.apache.iotdb.db.utils.datastructure.TVList;
@@ -30,6 +31,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.reader.IPointReader;
 
 import org.slf4j.Logger;
@@ -62,6 +64,8 @@ public class ReadOnlyMemChunk {
 
   protected IPointReader chunkPointReader;
 
+  protected TsBlock tsblock;
+
   private int chunkDataSize;
 
   public ReadOnlyMemChunk() {
@@ -101,9 +105,15 @@ public class ReadOnlyMemChunk {
     this.chunkDataSize = size;
     this.deletionList = deletionList;
 
-    this.chunkPointReader =
-        tvList.getIterator(floatPrecision, encoding, chunkDataSize, deletionList);
-    initChunkMeta();
+    if (IoTDBDescriptor.getInstance().getConfig().isMppMode()) {
+      this.tsblock = tvList.getTsBlock(floatPrecision, encoding, chunkDataSize, deletionList);
+      initChunkMetaFromTsBlock();
+      this.chunkPointReader = tsblock.getTsBlockSingleColumnIterator();
+    } else {
+      this.chunkPointReader =
+          tvList.getIterator(floatPrecision, encoding, chunkDataSize, deletionList);
+      initChunkMeta();
+    }
   }
 
   private void initChunkMeta() throws IOException, QueryProcessException {
@@ -144,12 +154,54 @@ public class ReadOnlyMemChunk {
     cachedMetaData = metaData;
   }
 
+  private void initChunkMetaFromTsBlock() throws IOException, QueryProcessException {
+    Statistics statsByType = Statistics.getStatsByType(dataType);
+    IChunkMetadata metaData = new ChunkMetadata(measurementUid, dataType, 0, statsByType);
+    if (!isEmpty()) {
+      IPointReader iterator =
+          chunkData.getTsBlock(floatPrecision, encoding, chunkDataSize, deletionList).getTsBlockSingleColumnIterator();
+      while (iterator.hasNextTimeValuePair()) {
+        TimeValuePair timeValuePair = iterator.nextTimeValuePair();
+        switch (dataType) {
+          case BOOLEAN:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getBoolean());
+            break;
+          case TEXT:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getBinary());
+            break;
+          case FLOAT:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getFloat());
+            break;
+          case INT32:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getInt());
+            break;
+          case INT64:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getLong());
+            break;
+          case DOUBLE:
+            statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getDouble());
+            break;
+          default:
+            throw new QueryProcessException("Unsupported data type:" + dataType);
+        }
+      }
+    }
+    statsByType.setEmpty(isEmpty());
+    metaData.setChunkLoader(new MemChunkLoader(this));
+    metaData.setVersion(Long.MAX_VALUE);
+    cachedMetaData = metaData;
+  }
+
   public TSDataType getDataType() {
     return dataType;
   }
 
   public boolean isEmpty() throws IOException {
-    return !chunkPointReader.hasNextTimeValuePair();
+    if (IoTDBDescriptor.getInstance().getConfig().isMppMode()) {
+      return tsblock.isEmpty();
+    } else {
+      return !chunkPointReader.hasNextTimeValuePair();
+    }
   }
 
   public IChunkMetadata getChunkMetaData() {
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index e8d4af943e..4819d1cd89 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.reader.IPointReader;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BitMap;
@@ -915,6 +916,12 @@ public class AlignedTVList extends TVList {
     throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    return null;
+  }
+
   public IPointReader getAlignedIterator(
       int floatPrecision,
       List<TSEncoding> encodingList,
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
index 4a711a7b0f..fc15313619 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
@@ -18,12 +18,18 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -196,6 +202,22 @@ public class BinaryTVList extends TVList {
     return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.TEXT, getBinary(index)));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeBinaries(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeBinaries(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
index 2b15a4e286..93df9b173f 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
@@ -18,12 +18,18 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -196,6 +202,22 @@ public class BooleanTVList extends TVList {
         time, TsPrimitiveType.getByType(TSDataType.BOOLEAN, getBoolean(index)));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeBooleans(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeBooleans(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index 3fe9f016d6..517bd5a574 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.utils.MathUtils;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
@@ -25,6 +26,11 @@ import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
@@ -199,6 +205,22 @@ public class DoubleTVList extends TVList {
     return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.DOUBLE, value));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeDoubles(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeDoubles(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index b11d26360d..df5eaa4029 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.utils.MathUtils;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
@@ -25,6 +26,11 @@ import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
@@ -199,6 +205,22 @@ public class FloatTVList extends TVList {
     return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.FLOAT, value));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeFloats(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeFloats(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
index c6779acf17..e785c3ab91 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
@@ -18,12 +18,18 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
@@ -194,6 +200,22 @@ public class IntTVList extends TVList {
     return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.INT32, getInt(index)));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeInts(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeInts(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
index cd7e1e5124..9d7f6d4af5 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
@@ -18,12 +18,18 @@
  */
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.utils.BitMap;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
@@ -194,6 +200,22 @@ public class LongTVList extends TVList {
     return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.INT64, getLong(index)));
   }
 
+  @Override
+  public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+      List<TimeRange> deletionList) {
+    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+    for (int i = 0; i < timestamps.size() - 1; i++) {
+      timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      valueBuilder.writeLongs(values.get(i), ARRAY_SIZE);
+    }
+    timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    valueBuilder.writeLongs(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    builder.declarePositions(size);
+    return builder.build();
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
index 56ac6e1205..fb9f790bff 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.utils.datastructure;
 
+import java.util.Collections;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
 import org.apache.iotdb.db.wal.buffer.WALEntryValue;
@@ -26,6 +27,10 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
 import org.apache.iotdb.tsfile.read.reader.IPointReader;
 import org.apache.iotdb.tsfile.utils.Binary;
 import org.apache.iotdb.tsfile.utils.BitMap;
@@ -616,6 +621,9 @@ public abstract class TVList implements WALEntryValue {
     }
   }
 
+  public abstract TsBlock getTsBlock(
+      int floatPrecision, TSEncoding encoding, int size, List<TimeRange> deletionList);
+
   public abstract TSDataType getDataType();
 
   public static TVList deserialize(DataInputStream stream) throws IOException {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
index 95e71edc06..ad959a4992 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
@@ -29,22 +29,22 @@ public interface ColumnBuilder {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
-  /** Write a short to the current entry; */
+  /** Write a int to the current entry; */
   default ColumnBuilder writeInt(int value) {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
-  /** Write a int to the current entry; */
+  /** Write a long to the current entry; */
   default ColumnBuilder writeLong(long value) {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
-  /** Write a long to the current entry; */
+  /** Write a float to the current entry; */
   default ColumnBuilder writeFloat(float value) {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
-  /** Write a byte sequences to the current entry; */
+  /** Write a double to the current entry; */
   default ColumnBuilder writeDouble(double value) {
     throw new UnsupportedOperationException(getClass().getName());
   }
@@ -54,6 +54,36 @@ public interface ColumnBuilder {
     throw new UnsupportedOperationException(getClass().getName());
   }
 
+  /** Write a boolean array to the current entry; */
+  default ColumnBuilder writeBooleans(boolean[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
+  /** Write a int array to the current entry; */
+  default ColumnBuilder writeInts(int[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
+  /** Write a long array to the current entry; */
+  default ColumnBuilder writeLongs(long[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
+  /** Write a float array to the current entry; */
+  default ColumnBuilder writeFloats(float[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
+  /** Write a double array to the current entry; */
+  default ColumnBuilder writeDoubles(double[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
+  /** Write a Binary array to the current entry; */
+  default ColumnBuilder writeBinaries(Binary[] values, int length) {
+    throw new UnsupportedOperationException(getClass().getName());
+  }
+
   /** Write a TsPrimitiveType sequences to the current entry; */
   default ColumnBuilder writeTsPrimitiveType(TsPrimitiveType value) {
     throw new UnsupportedOperationException(getClass().getName());
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
index 59157916be..7ace64aeca 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
@@ -66,6 +66,21 @@ public class TimeColumnBuilder implements ColumnBuilder {
     return this;
   }
 
+  @Override
+  public ColumnBuilder writeLongs(long[] valuesToBeWritten, int length) {
+    if (values.length <= positionCount + length) {
+      growCapacity();
+    }
+
+    System.arraycopy(valuesToBeWritten, 0, values, values.length, length);
+
+    positionCount += length;
+    if (columnBuilderStatus != null) {
+      columnBuilderStatus.addBytes(TimeColumn.SIZE_IN_BYTES_PER_POSITION * length);
+    }
+    return this;
+  }
+
   /** Write an Object to the current entry, which should be the Long type; */
   @Override
   public ColumnBuilder writeObject(Object value) {


[iotdb] 03/03: roundWithGivenPrecision

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e66a4d5c731b5e66c877023feb3b3ed57cf52d43
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon May 2 17:36:21 2022 +0800

    roundWithGivenPrecision
---
 .../apache/iotdb/db/utils/datastructure/DoubleTVList.java    | 12 ++++++++++++
 .../org/apache/iotdb/db/utils/datastructure/FloatTVList.java | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index 517bd5a574..9abb886a70 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -213,14 +213,26 @@ public class DoubleTVList extends TVList {
     ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
     for (int i = 0; i < timestamps.size() - 1; i++) {
       timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
       valueBuilder.writeDoubles(values.get(i), ARRAY_SIZE);
     }
     timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, encoding);
     valueBuilder.writeDoubles(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
     builder.declarePositions(size);
     return builder.build();
   }
 
+  private void getValuesWithGivenPrecision(double[] values, int floatPrecision, TSEncoding encoding) {
+    if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+      for (int i = 0; i < values.length; i++) {
+        if (!Double.isNaN(values[i])) {
+          values[i] = MathUtils.roundWithGivenPrecision(values[i], floatPrecision);
+        }
+      }
+    }
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index df5eaa4029..31eb193699 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -213,14 +213,26 @@ public class FloatTVList extends TVList {
     ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
     for (int i = 0; i < timestamps.size() - 1; i++) {
       timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
       valueBuilder.writeFloats(values.get(i), ARRAY_SIZE);
     }
     timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, encoding);
     valueBuilder.writeFloats(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
     builder.declarePositions(size);
     return builder.build();
   }
 
+  private void getValuesWithGivenPrecision(float[] values, int floatPrecision, TSEncoding encoding) {
+    if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+      for (int i = 0; i < values.length; i++) {
+        if (!Float.isNaN(values[i])) {
+          values[i] = MathUtils.roundWithGivenPrecision(values[i], floatPrecision);
+        }
+      }
+    }
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));