You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xu...@apache.org on 2020/04/23 05:45:30 UTC

[incubator-iotdb] branch IOTDB-615-Use-binary-rather-than-string-in-insert-plan created (now d4b3ed6)

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

xuekaifeng pushed a change to branch IOTDB-615-Use-binary-rather-than-string-in-insert-plan
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at d4b3ed6  init

This branch includes the following new commits:

     new 275fe18  Merge branch 'master' of https://github.com/apache/incubator-iotdb
     new d4b3ed6  init

The 2 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.



[incubator-iotdb] 01/02: Merge branch 'master' of https://github.com/apache/incubator-iotdb

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

xuekaifeng pushed a commit to branch IOTDB-615-Use-binary-rather-than-string-in-insert-plan
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 275fe1816f1a7fa88f439af7ee3960730abd3a56
Merge: 693832e e92f24e
Author: 151250176 <15...@smail.nju.edu.cn>
AuthorDate: Thu Apr 23 10:37:13 2020 +0800

    Merge branch 'master' of https://github.com/apache/incubator-iotdb

 .gitignore                                         |     1 +
 .travis.yml                                        |   140 +-
 Jenkinsfile                                        |    25 +-
 LICENSE                                            |    13 -
 LICENSE-binary                                     |     4 +-
 README.md                                          |    18 +-
 README_ZH.md                                       |   383 +
 .../src/assembly/resources/sbin/start-client.bat   |     6 +-
 .../org/apache/iotdb/client/AbstractClient.java    |    83 +-
 .../main/java/org/apache/iotdb/client/Client.java  |     2 +-
 .../java/org/apache/iotdb/client/WinClient.java    |     3 +
 client/src/test/resources/logback.xml              |    12 +-
 distribution/pom.xml                               |    13 +
 docs/Community/Community-Powered By.md             |    15 +-
 docs/Community/Community-Project Committers.md     |    33 +-
 docs/Community/Feedback.md                         |    48 +
 docs/Community/Materials.md                        |   100 +
 docs/Development/Committer.md                      |    77 +
 docs/Development/ContributeGuide.md                |   109 +
 docs/Development/Development-Contributing.md       |   214 -
 docs/Development/Development-Document.md           |    51 -
 docs/Development/Development-IDE.md                |    65 -
 docs/Development/HowToCommit.md                    |   139 +
 .../{Development-VoteRelease.md => VoteRelease.md} |    80 +-
 docs/Documentation/OtherMaterial-Sample Data.txt   | 60509 -------------------
 docs/Documentation/SystemDesign/0-Content.md       |    54 -
 docs/Documentation/SystemDesign/release.adoc       |   519 -
 docs/Download/README.md                            |    65 +
 .../3-Server/3-Cluster Setup.md => README.md}      |     5 +-
 .../SystemDesign/0-Architecture/1-Architecture.md  |    14 +-
 .../SystemDesign/1-TsFile/1-TsFile.md              |     6 +-
 .../SystemDesign/1-TsFile/2-Format.md              |    24 +-
 .../SystemDesign/1-TsFile/3-Write.md               |     0
 .../SystemDesign/1-TsFile/4-Read.md                |     0
 .../SystemDesign/2-QueryEngine/1-QueryEngine.md    |     4 +-
 .../SystemDesign/2-QueryEngine/2-Planner.md        |     0
 .../SystemDesign/2-QueryEngine/3-PlanExecutor.md   |     0
 .../3-SchemaManager/1-SchemaManager.md             |     0
 .../4-StorageEngine/1-StorageEngine.md             |     8 +-
 .../SystemDesign/4-StorageEngine/2-WAL.md          |     0
 .../SystemDesign/4-StorageEngine/3-FlushManager.md |     0
 .../SystemDesign/4-StorageEngine/4-MergeManager.md |     0
 .../4-StorageEngine/5-DataPartition.md             |     0
 .../4-StorageEngine/6-DataManipulation.md          |    19 +-
 .../SystemDesign/5-DataQuery/1-DataQuery.md        |    16 +-
 .../5-DataQuery/10-GroupByFillQuery.md             |   177 +
 .../SystemDesign/5-DataQuery/2-SeriesReader.md     |     0
 .../5-DataQuery/3-ModificationHandle.md            |    73 +
 .../5-DataQuery/4-RawDataQuery.md}                 |     0
 .../5-DataQuery/5-AggregationQuery.md}             |     0
 .../5-DataQuery/6-GroupByQuery.md}                 |     0
 .../5-DataQuery/7-LastQuery.md}                    |     0
 .../5-DataQuery/8-AlignByDeviceQuery.md}           |    21 +-
 docs/SystemDesign/5-DataQuery/9-FillFunction.md    |   149 +
 .../SystemDesign/6-Tools/1-Sync.md                 |     0
 .../SystemDesign/7-Connector/2-Hive-TsFile.md      |     0
 .../SystemDesign/7-Connector/3-Spark-TsFile.md     |     0
 .../SystemDesign/7-Connector/4-Spark-IOTDB.md      |     0
 .../UserGuide/0-Get Started/1-QuickStart.md        |    25 +-
 .../0-Get Started/2-Frequently asked questions.md  |     0
 .../UserGuide/0-Get Started/3-Publication.md       |     0
 .../UserGuide/1-Overview/1-What is IoTDB.md        |     0
 .../UserGuide/1-Overview/2-Architecture.md         |     0
 .../UserGuide/1-Overview/3-Scenario.md             |     0
 .../UserGuide/1-Overview/4-Features.md             |     0
 .../2-Concept/1-Data Model and Terminology.md      |     6 +-
 .../UserGuide/2-Concept/2-Data Type.md             |     2 +-
 .../UserGuide/2-Concept/3-Encoding.md              |     2 +-
 .../UserGuide/2-Concept/4-Compression.md           |     2 +-
 .../UserGuide/3-Server/1-Download.md               |     6 +-
 .../UserGuide/3-Server/2-Single Node Setup.md      |    10 +-
 .../UserGuide/3-Server/3-Cluster Setup.md          |     0
 .../UserGuide/3-Server/4-Config Manual.md          |    56 +-
 .../UserGuide/3-Server/5-Docker Image.md           |     0
 .../UserGuide/4-Client/1-Command Line Interface.md |    10 +-
 .../4-Client/2-Programming - Native API.md         |     0
 .../UserGuide/4-Client/3-Programming - JDBC.md     |     0
 .../4-Client/4-Programming - Other Languages.md    |     0
 .../4-Client/5-Programming - TsFile API.md         |    16 +-
 docs/UserGuide/4-Client/6-Programming - MQTT.md    |   100 +
 .../4-Client/7-Status Codes.md}                    |     0
 .../1-DDL Data Definition Language.md              |    33 +-
 .../2-DML Data Manipulation Language.md            |   126 +-
 .../3-Account Management Statements.md             |     2 +-
 .../5-Operation Manual/4-SQL Reference.md          |    88 +-
 .../UserGuide/6-System Tools/1-Sync Tool.md        |     0
 .../6-System Tools/2-Memory Estimation Tool.md     |     0
 .../UserGuide/6-System Tools/3-JMX Tool.md         |    22 +
 .../UserGuide/6-System Tools/4-Watermark Tool.md   |     0
 .../UserGuide/6-System Tools/5-Log Visualizer.md   |     0
 .../6-Query History Visualization Tool.md          |     0
 .../6-System Tools/7-Monitor and Log Tools.md      |     4 +-
 .../6-System Tools/8-Load External Tsfile.md       |     0
 .../UserGuide/7-Ecosystem Integration/1-Grafana.md |    70 +-
 .../7-Ecosystem Integration/2-MapReduce TsFile.md  |     0
 .../7-Ecosystem Integration/3-Spark TsFile.md      |     0
 .../7-Ecosystem Integration/4-Spark IoTDB.md       |     0
 .../7-Ecosystem Integration/5-Hive TsFile.md       |     0
 .../UserGuide/8-Architecture/1-Files.md            |     8 +-
 .../8-Architecture/2-Writing Data on HDFS.md       |     4 +-
 .../8-Architecture/3-Shared Nothing Cluster.md     |     0
 .../1-TsFile.md => UserGuide/UserGuideReadme.md}   |    13 +-
 docs/zh/Community/Community-Powered By.md          |    36 +
 .../Community/Community-Project Committers.md}     |     8 +-
 docs/zh/Community/Feedback.md                      |    44 +
 docs/zh/Community/Materials.md                     |    95 +
 docs/zh/Development/Committer.md                   |    78 +
 .../Development/ContributeGuide.md}                |    60 +-
 docs/zh/Development/HowToCommit.md                 |   139 +
 .../Development/VoteRelease.md}                    |     2 +-
 docs/zh/Download/README.md                         |    64 +
 .../3-Server/3-Cluster Setup.md => zh/README.md}   |     5 +-
 .../SystemDesign/0-Architecture/1-Architecture.md  |     0
 .../SystemDesign/1-TsFile/1-TsFile.md              |     0
 .../SystemDesign/1-TsFile/2-Format.md              |    26 +-
 .../SystemDesign/1-TsFile/3-Write.md               |     0
 .../SystemDesign/1-TsFile/4-Read.md                |     0
 .../SystemDesign/2-QueryEngine/1-QueryEngine.md    |     4 +-
 .../SystemDesign/2-QueryEngine/2-Planner.md        |     0
 .../SystemDesign/2-QueryEngine/3-PlanExecutor.md   |     0
 .../3-SchemaManager/1-SchemaManager.md             |     0
 .../4-StorageEngine/1-StorageEngine.md             |     8 +-
 .../SystemDesign/4-StorageEngine/2-WAL.md          |     0
 .../SystemDesign/4-StorageEngine/3-FlushManager.md |     0
 .../SystemDesign/4-StorageEngine/4-MergeManager.md |     0
 .../4-StorageEngine/5-DataPartition.md             |     0
 .../4-StorageEngine/6-DataManipulation.md          |    18 +-
 .../SystemDesign/5-DataQuery/1-DataQuery.md        |    16 +-
 .../5-DataQuery/10-GroupByFillQuery.md             |   176 +
 .../SystemDesign/5-DataQuery/2-SeriesReader.md     |     0
 .../5-DataQuery/3-ModificationHandle.md            |    73 +
 .../SystemDesign/5-DataQuery/4-RawDataQuery.md}    |     0
 .../5-DataQuery/5-AggregationQuery.md}             |     0
 .../SystemDesign/5-DataQuery/6-GroupByQuery.md}    |     0
 .../SystemDesign/5-DataQuery/7-LastQuery.md}       |     0
 .../5-DataQuery/8-AlignByDeviceQuery.md}           |    13 +-
 docs/zh/SystemDesign/5-DataQuery/9-FillFunction.md |   148 +
 .../SystemDesign/6-Tools/1-Sync.md                 |     0
 .../SystemDesign/7-Connector/2-Hive-TsFile.md      |     0
 .../SystemDesign/7-Connector/3-Spark-TsFile.md     |    48 +-
 .../SystemDesign/7-Connector/4-Spark-IOTDB.md      |     0
 .../UserGuide/0-Get Started/1-QuickStart.md        |    18 +-
 .../0-Get Started/2-Frequently asked questions.md  |     0
 .../UserGuide/0-Get Started/3-Publication.md       |     0
 .../UserGuide/1-Overview/1-What is IoTDB.md        |     0
 .../UserGuide/1-Overview/2-Architecture.md         |     0
 .../UserGuide/1-Overview/3-Scenario.md             |     0
 .../UserGuide/1-Overview/4-Features.md             |     0
 .../2-Concept/1-Data Model and Terminology.md      |     6 +-
 .../UserGuide/2-Concept/2-Data Type.md             |     2 +-
 .../UserGuide/2-Concept/3-Encoding.md              |     2 +-
 .../UserGuide/2-Concept/4-Compression.md           |     2 +-
 .../UserGuide/3-Server/1-Download.md               |     8 +-
 .../UserGuide/3-Server/2-Single Node Setup.md      |    11 +-
 .../UserGuide/3-Server/3-Cluster Setup.md          |     0
 .../UserGuide/3-Server/4-Config Manual.md          |    17 +-
 .../UserGuide/3-Server/5-Docker Image.md           |     0
 .../UserGuide/4-Client/1-Command Line Interface.md |    10 +-
 .../4-Client/2-Programming - Native API.md         |     0
 .../UserGuide/4-Client/3-Programming - JDBC.md     |     0
 .../4-Client/4-Programming - Other Languages.md    |     0
 .../4-Client/5-Programming - TsFile API.md         |    16 +-
 docs/zh/UserGuide/4-Client/6-Programming - MQTT.md |   101 +
 .../UserGuide/4-Client/7-Status Codes.md}          |     0
 .../1-DDL Data Definition Language.md              |    33 +-
 .../2-DML Data Manipulation Language.md            |   115 +-
 .../3-Account Management Statements.md             |     4 +-
 .../5-Operation Manual/4-SQL Reference.md          |    93 +-
 .../UserGuide/6-System Tools/1-Sync Tool.md        |     0
 .../6-System Tools/2-Memory Estimation Tool.md     |     0
 .../UserGuide/6-System Tools/3-JMX Tool.md         |    22 +
 .../UserGuide/6-System Tools/4-Watermark Tool.md   |     0
 .../UserGuide/6-System Tools/5-Log Visualizer.md   |     0
 .../6-Query History Visualization Tool.md          |     0
 .../6-System Tools/7-Monitor and Log Tools.md      |     6 +-
 .../6-System Tools/8-Load External Tsfile.md       |     0
 .../UserGuide/7-Ecosystem Integration/1-Grafana.md |    65 +-
 .../7-Ecosystem Integration/2-MapReduce TsFile.md  |     0
 .../7-Ecosystem Integration/3-Spark TsFile.md      |     0
 .../7-Ecosystem Integration/4-Spark IoTDB.md       |     0
 .../7-Ecosystem Integration/5-Hive TsFile.md       |     0
 .../UserGuide/8-Architecture/1-Files.md            |     8 +-
 .../8-Architecture/2-Writing Data on HDFS.md       |     4 +-
 .../8-Architecture/3-Shared Nothing Cluster.md     |     0
 .../UserGuide/UserGuideReadme.md}                  |    13 +-
 example/flink/README.md                            |    10 +-
 example/flink/pom.xml                              |     7 +-
 .../org/apache/iotdb/flink/FlinkIoTDBSink.java     |     6 -
 .../apache/iotdb/flink/FlinkTsFileBatchSource.java |    80 +
 .../iotdb/flink/FlinkTsFileStreamSource.java       |    84 +
 .../java/org/apache/iotdb/flink/TsFlieUtils.java   |    72 +
 .../org/apache/iotdb/hadoop/tsfile/Constant.java   |    17 +-
 .../iotdb/hadoop/tsfile/TSMRWriteExample.java      |   259 +-
 .../apache/iotdb/hadoop/tsfile/TsFileHelper.java   |    20 +-
 .../iotdb/hadoop/tsfile/TsFileWriteToHDFS.java     |    73 +
 .../main/java/org/apache/iotdb/JDBCExample.java    |    19 +-
 example/kafka/readme.md                            |     2 +-
 .../main/java/org/apache/iotdb/kafka/Constant.java |    11 +-
 .../apache/iotdb/kafka/KafkaConsumerThread.java    |     2 +-
 example/{flink => mqtt}/README.md                  |     8 +-
 example/{flink => mqtt}/pom.xml                    |    14 +-
 .../java/org/apache/iotdb/mqtt/MQTTClient.java     |    50 +
 example/pom.xml                                    |     1 +
 example/rocketmq/readme.md                         |     8 +-
 .../apache/iotdb/rocketmq/RocketMQConsumer.java    |     2 +-
 .../main/java/org/apache/iotdb/SessionExample.java |   136 +-
 .../java/org/apache/iotdb/tsfile/Constant.java     |    17 +-
 .../apache/iotdb/tsfile/TsFileSequenceRead.java    |    39 +-
 .../iotdb/tsfile/TsFileWriteWithRowBatch.java      |     9 +-
 .../iotdb/tsfile/TsFileWriteWithTSRecord.java      |    33 +-
 .../java/org/apache/iotdb/flink/IoTDBSink.java     |    32 +-
 .../iotdb/flink/IoTDBSinkBatchInsertTest.java      |    22 +-
 .../iotdb/flink/IoTDBSinkBatchTimerTest.java       |    14 +-
 .../apache/iotdb/flink/IoTDBSinkInsertTest.java    |    12 +-
 flink-tsfile-connector/README.md                   |    93 +
 {example/flink => flink-tsfile-connector}/pom.xml  |    19 +-
 .../apache/iotdb/flink/tsfile/RowRecordParser.java |    46 +
 .../iotdb/flink/tsfile/RowRowRecordParser.java     |   120 +
 .../iotdb/flink/tsfile/TsFileInputFormat.java      |   168 +
 .../iotdb/flink/tsfile/util/TSFileConfigUtil.java  |    65 +
 .../flink/tsfile/RowTsFileInputFormatITCase.java   |   109 +
 .../flink/tsfile/RowTsFileInputFormatTest.java     |    89 +
 .../flink/tsfile/RowTsFileInputFormatTestBase.java |   118 +
 .../util/TSFileConfigUtilCompletenessTest.java     |    84 +
 .../apache/iotdb/flink/util/TsFileWriteUtil.java   |   230 +
 grafana/readme.md                                  |    74 +-
 grafana/readme_zh.md                               |    95 +-
 .../iotdb/web/grafana/dao/impl/BasicDaoImpl.java   |    70 +-
 .../main/resources}/application.properties         |    10 +-
 hadoop/README.md                                   |     2 +-
 hadoop/pom.xml                                     |    55 +
 .../apache/iotdb/hadoop/fileSystem/HDFSFile.java   |     2 +-
 .../apache/iotdb/hadoop/fileSystem/HDFSOutput.java |     7 +-
 .../apache/iotdb/hadoop/tsfile/TSFInputFormat.java |    94 +-
 .../apache/iotdb/hadoop/tsfile/TSFInputSplit.java  |   251 +-
 .../iotdb/hadoop/tsfile/TSFRecordReader.java       |    69 +-
 .../iotdb/hadoop/tsfile/TSFRecordWriter.java       |     1 -
 .../iotdb/hadoop/tsfile/TSFInputSplitTest.java     |    21 +-
 .../iotdb/hadoop/tsfile/TsFileTestHelper.java      |     7 +-
 .../apache/iotdb/hive/TSFHiveInputFormatTest.java  |    29 +-
 .../apache/iotdb/hive/TSFHiveRecordReaderTest.java |    30 +-
 .../org/apache/iotdb/hive/TsFileTestHelper.java    |     3 +-
 jdbc/README.md                                     |    23 +
 jdbc/osgi.bnd                                      |    31 +
 jdbc/pom.xml                                       |    97 +
 jdbc/src/main/feature/feature.xml                  |    35 +
 .../apache/iotdb/jdbc/AbstractIoTDBResultSet.java  |    35 +-
 .../main/java/org/apache/iotdb/jdbc/Activator.java |    40 +
 .../org/apache/iotdb/jdbc/IoTDBDataSource.java     |   146 +
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |    11 +-
 .../java/org/apache/iotdb/jdbc/IoTDBDriver.java    |     4 +-
 .../iotdb/jdbc/IoTDBNonAlignQueryResultSet.java    |    21 +-
 .../apache/iotdb/jdbc/IoTDBPreparedStatement.java  |    92 +-
 .../org/apache/iotdb/jdbc/IoTDBQueryResultSet.java |    10 +-
 .../java/org/apache/iotdb/jdbc/IoTDBStatement.java |     8 +-
 .../apache/iotdb/jdbc/IoTDbDataSourceFactory.java  |    79 +
 .../resources/services/META-INF/java.sql.Driver    |     9 +-
 pom.xml                                            |    70 +-
 server/pom.xml                                     |    28 +-
 .../resources/conf/iotdb-engine.properties         |   121 +-
 server/src/assembly/resources/conf/iotdb-env.bat   |    30 +-
 server/src/assembly/resources/conf/iotdb-env.sh    |    30 +-
 .../src/assembly/resources/conf/jmx.access         |    11 +-
 .../src/assembly/resources/conf/jmx.password       |    11 +-
 server/src/assembly/resources/conf/logback.xml     |    21 +-
 .../src/assembly/resources/sbin/start-server.bat   |    27 +-
 server/src/assembly/resources/sbin/start-server.sh |    20 +-
 .../org/apache/iotdb/db/qp/strategy/SqlBase.g4     |    73 +-
 .../db/concurrent/IoTDBThreadPoolFactory.java      |     6 +-
 .../org/apache/iotdb/db/concurrent/ThreadName.java |     4 +-
 .../iotdb/db/concurrent/WrappedRunnable.java       |    31 +-
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |   145 +-
 .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java |    17 +
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |    17 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |    76 +-
 .../db/conf/adapter/IoTDBConfigDynamicAdapter.java |    33 +-
 .../iotdb/db/cost/statistic/Measurement.java       |     9 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |    71 +-
 .../db/engine/cache/CacheHitRatioMonitor.java      |     9 +-
 .../engine/cache/CacheHitRatioMonitorMXBean.java   |     2 +
 .../apache/iotdb/db/engine/cache/ChunkCache.java   |    29 +-
 .../iotdb/db/engine/cache/ChunkMetadataCache.java  |   198 +
 .../iotdb/db/engine/cache/DeviceMetaDataCache.java |   231 -
 .../db/engine/cache/TimeSeriesMetadataCache.java   |   223 +
 .../iotdb/db/engine/cache/TsFileMetaDataCache.java |   103 +-
 .../iotdb/db/engine/cache/TsFileMetadataUtils.java |   122 -
 .../apache/iotdb/db/engine/flush/FlushManager.java |     6 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |   109 +-
 .../iotdb/db/engine/flush/NotifyFlushMemTable.java |     4 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java |    25 +-
 .../apache/iotdb/db/engine/memtable/IMemTable.java |     3 +-
 .../db/engine/memtable/IWritableMemChunk.java      |     3 +-
 .../db/engine/memtable/PrimitiveMemTable.java      |     6 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |    17 +-
 .../db/engine/merge/manage/MergeResource.java      |    36 +-
 .../iotdb/db/engine/merge/recover/LogAnalyzer.java |     2 +-
 .../merge/selector/MaxFileMergeFileSelector.java   |    62 +-
 .../iotdb/db/engine/merge/task/MergeFileTask.java  |    96 +-
 .../db/engine/merge/task/MergeMultiChunkTask.java  |    88 +-
 .../iotdb/db/engine/merge/task/MergeTask.java      |    26 +-
 .../db/engine/merge/task/RecoverMergeTask.java     |    10 +-
 .../db/engine/querycontext/ReadOnlyMemChunk.java   |    19 +-
 .../engine/storagegroup/StorageGroupProcessor.java |   324 +-
 .../db/engine/storagegroup/TsFileProcessor.java    |    71 +-
 .../db/engine/storagegroup/TsFileResource.java     |   142 +-
 .../iotdb/db/engine/upgrade/UpgradeTask.java       |    18 +-
 .../metadata/AliasAlreadyExistException.java}      |    17 +-
 .../db/exception/metadata/MetadataException.java   |     2 +-
 ...viceException.java => RPCServiceException.java} |     6 +-
 .../org/apache/iotdb/db/metadata/MLogWriter.java   |   164 +
 .../org/apache/iotdb/db/metadata/MManager.java     |   572 +-
 .../java/org/apache/iotdb/db/metadata/MTree.java   |   145 +-
 .../org/apache/iotdb/db/metadata/MetaUtils.java    |     8 +-
 .../apache/iotdb/db/metadata/MetadataConstant.java |     1 +
 .../org/apache/iotdb/db/metadata/TagLogFile.java   |   143 +
 .../iotdb/db/metadata/mnode/InternalMNode.java     |    22 +-
 .../apache/iotdb/db/metadata/mnode/LeafMNode.java  |    49 +-
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |    20 +-
 .../iotdb/db/metadata/mnode/StorageGroupMNode.java |    15 +-
 .../org/apache/iotdb/db/monitor/StatMonitor.java   |     5 +-
 .../iotdb/db/monitor/collector/FileSize.java       |    17 -
 .../apache/iotdb/db/mqtt/BrokerAuthenticator.java  |    48 +
 .../apache/iotdb/db/mqtt/JSONPayloadFormatter.java |    90 +
 .../java/org/apache/iotdb/db/mqtt/Message.java     |    73 +
 .../apache/iotdb/db/mqtt/PayloadFormatManager.java |    47 +
 .../org/apache/iotdb/db/mqtt/PayloadFormatter.java |    40 +
 .../org/apache/iotdb/db/mqtt/PublishHandler.java   |   110 +
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |     2 +
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |   295 +-
 .../org/apache/iotdb/db/qp/logical/Operator.java   |     2 +-
 .../iotdb/db/qp/logical/crud/QueryOperator.java    |    10 +
 .../iotdb/db/qp/logical/crud/SelectOperator.java   |     5 +-
 .../qp/logical/sys/CreateTimeSeriesOperator.java   |    31 +-
 .../db/qp/logical/sys/ShowTimeSeriesOperator.java  |    45 +
 .../iotdb/db/qp/physical/crud/BatchInsertPlan.java |    13 +-
 .../iotdb/db/qp/physical/crud/GroupByFillPlan.java |    29 +-
 .../iotdb/db/qp/physical/crud/GroupByPlan.java     |    11 +
 .../iotdb/db/qp/physical/crud/InsertPlan.java      |    37 +-
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |    16 +-
 .../db/qp/physical/crud/RawDataQueryPlan.java      |    20 +-
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   |   100 +-
 .../db/qp/physical/sys/ShowTimeSeriesPlan.java     |    40 +-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |   295 +-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   146 +-
 .../db/query/aggregation/AggregateResult.java      |     7 +-
 .../iotdb/db/query/context/QueryContext.java       |     4 +-
 .../iotdb/db/query/control/FileReaderManager.java  |    71 +-
 .../db/query/control/QueryResourceManager.java     |     6 +-
 .../db/query/dataset/NonAlignEngineDataSet.java    |     5 +-
 .../dataset/RawQueryDataSetWithValueFilter.java    |    22 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java |     5 +-
 .../db/query/dataset/ShowTimeSeriesResult.java     |    71 +
 .../dataset/groupby/GroupByEngineDataSet.java      |    20 +-
 .../db/query/dataset/groupby/GroupByExecutor.java  |     5 +-
 .../query/dataset/groupby/GroupByFillDataSet.java  |   119 +
 .../groupby/GroupByWithValueFilterDataSet.java     |    35 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |    38 +-
 .../dataset/groupby/LocalGroupByExecutor.java      |    54 +-
 .../db/query/executor/AggregationExecutor.java     |    71 +-
 .../iotdb/db/query/executor/FillQueryExecutor.java |    17 +-
 .../iotdb/db/query/executor/IQueryRouter.java      |    19 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java |    98 +-
 .../iotdb/db/query/executor/QueryRouter.java       |    45 +-
 .../db/query/executor/RawDataQueryExecutor.java    |    47 +-
 .../adapter/ByTimestampReaderAdapter.java          |    46 +-
 .../java/org/apache/iotdb/db/query/fill/IFill.java |    21 +-
 .../org/apache/iotdb/db/query/fill/LinearFill.java |    27 +-
 .../apache/iotdb/db/query/fill/PreviousFill.java   |   231 +-
 .../db/query/reader/chunk/ChunkReaderWrap.java     |    10 +-
 .../db/query/reader/chunk/DiskChunkLoader.java     |     7 +-
 .../reader/chunk/DiskChunkReaderByTimestamp.java   |    55 +-
 .../db/query/reader/chunk/MemChunkLoader.java      |     7 +-
 .../db/query/reader/chunk/MemChunkReader.java      |     3 +-
 .../iotdb/db/query/reader/chunk/MemPageReader.java |     5 +
 .../chunk/metadata/DiskChunkMetadataLoader.java    |    82 +
 .../chunk/metadata/MemChunkMetadataLoader.java     |    68 +
 .../db/query/reader/series/IAggregateReader.java   |     8 +
 .../db/query/reader/series/IReaderByTimestamp.java |    14 +-
 .../query/reader/series/SeriesAggregateReader.java |    39 +-
 .../reader/series/SeriesRawDataBatchReader.java    |    33 +-
 .../iotdb/db/query/reader/series/SeriesReader.java |   450 +-
 .../reader/series/SeriesReaderByTimestamp.java     |    53 +-
 .../query/timegenerator/ServerTimeGenerator.java   |    12 +-
 .../java/org/apache/iotdb/db/service/IoTDB.java    |    18 +-
 .../apache/iotdb/db/service/IoTDBShutdownHook.java |     2 +-
 .../iotdb/db/service/JDBCServiceEventHandler.java  |    59 -
 .../org/apache/iotdb/db/service/JMXService.java    |    56 +-
 .../org/apache/iotdb/db/service/MQTTService.java   |   103 +
 .../apache/iotdb/db/service/MetricsService.java    |     5 +-
 .../service/{JDBCService.java => RPCService.java}  |   109 +-
 ...{JDBCServiceMBean.java => RPCServiceMBean.java} |     4 +-
 .../org/apache/iotdb/db/service/ServiceType.java   |     3 +-
 .../org/apache/iotdb/db/service/StartupChecks.java |     9 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java |   203 +-
 .../iotdb/db/sync/receiver/SyncServerManager.java  |    29 +-
 .../db/sync/thrift/SyncServiceEventHandler.java    |    56 -
 .../apache/iotdb/db/tools/TsFileSketchTool.java    |   140 +-
 .../db/tools/memestimation/MemEstToolCmd.java      |     5 +-
 .../iotdb/db/tools/upgrade/OfflineUpgradeTool.java |    68 -
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |   169 +-
 .../org/apache/iotdb/db/utils/FilePathUtils.java   |     1 +
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |    48 +-
 .../java/org/apache/iotdb/db/utils/MergeUtils.java |    57 +-
 .../java/org/apache/iotdb/db/utils/QueryUtils.java |    22 +-
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |    45 +-
 .../db/writelog/node/ExclusiveWriteLogNode.java    |     8 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |    46 +-
 .../writelog/recover/TsFileRecoverPerformer.java   |   128 +-
 .../org.apache.iotdb.db.mqtt.PayloadFormatter      |     9 +-
 ...sorTest.java => LocalFileRoleAccessorTest.java} |     2 +-
 .../db/concurrent/IoTDBThreadPoolFactoryTest.java  |    36 +-
 .../conf/adapter/ActiveTimeSeriesCounterTest.java  |    19 +-
 .../iotdb/db/engine/MetadataManagerHelper.java     |    42 +-
 ...aCacheTest.java => ChunkMetadataCacheTest.java} |    22 +-
 .../db/engine/memtable/MemTableFlushTaskTest.java  |     8 +-
 .../iotdb/db/engine/memtable/MemTablePoolTest.java |    13 -
 .../db/engine/memtable/MemTableTestUtils.java      |     6 +-
 .../db/engine/memtable/MemtableBenchmark.java      |     4 +-
 .../db/engine/memtable/PrimitiveMemTableTest.java  |     9 +-
 .../engine/merge/MaxFileMergeFileSelectorTest.java |     6 +-
 .../merge/MaxSeriesMergeFileSelectorTest.java      |    21 +-
 .../apache/iotdb/db/engine/merge/MergeLogTest.java |     2 +
 .../iotdb/db/engine/merge/MergeOverLapTest.java    |     9 +-
 .../apache/iotdb/db/engine/merge/MergeTest.java    |    14 +-
 .../iotdb/db/engine/merge/MergeUpgradeTest.java    |    13 +-
 .../engine/modification/DeletionFileNodeTest.java  |    48 +-
 .../db/engine/modification/DeletionQueryTest.java  |    44 +-
 .../storagegroup/FileNodeManagerBenchmark.java     |     7 +-
 .../storagegroup/StorageGroupProcessorTest.java    |    24 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |    36 +-
 .../engine/storagegroup/TsFileProcessorTest.java   |    67 +-
 .../iotdb/db/integration/IOTDBGroupByIT.java       |    35 +-
 .../db/integration/IoTDBAggregationDeleteIT.java   |    98 +
 .../iotdb/db/integration/IoTDBAggregationIT.java   |    12 +-
 .../integration/IoTDBAggregationLargeDataIT.java   |    58 +-
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java |     2 +-
 .../db/integration/IoTDBAutoCreateSchemaIT.java    |     2 -
 .../iotdb/db/integration/IoTDBCompleteIT.java      |     9 +-
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java |    38 +-
 .../iotdb/db/integration/IoTDBDeletionIT.java      |    21 +-
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |    26 +-
 .../apache/iotdb/db/integration/IoTDBFillIT.java   |   393 +-
 ...yMergeTest.java => IoTDBFlushQueryMergeIT.java} |     5 +-
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   |   545 +
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |    80 +-
 ...ileTest.java => IoTDBLoadExternalTsfileIT.java} |    49 +-
 .../iotdb/db/integration/IoTDBMergeTest.java       |     3 +-
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |    18 +-
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        |   109 +
 .../db/integration/IoTDBMultiOverlappedPageIT.java |   146 +
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |     7 +-
 .../db/integration/IoTDBOverlappedPageIT.java      |   131 +
 .../iotdb/db/integration/IoTDBRestartIT.java       |   145 +
 .../IoTDBSameMeasurementsDifferentTypesIT.java     |   190 +
 .../db/integration/IoTDBSequenceDataQueryIT.java   |    17 +-
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |    26 +-
 ...impleQueryTest.java => IoTDBSimpleQueryIT.java} |    27 +-
 .../apache/iotdb/db/integration/IoTDBTagIT.java    |   835 +
 .../iotdb/db/metadata/MManagerAdvancedTest.java    |    65 +-
 .../iotdb/db/metadata/MManagerBasicTest.java       |    23 +-
 .../iotdb/db/metadata/MManagerImproveTest.java     |    29 +-
 .../org/apache/iotdb/db/metadata/MTreeTest.java    |   136 +-
 .../iotdb/db/mqtt/BrokerAuthenticatorTest.java     |    35 +
 .../iotdb/db/mqtt/JSONPayloadFormatTest.java       |    69 +
 .../iotdb/db/mqtt/PayloadFormatManagerTest.java    |    35 +
 .../apache/iotdb/db/mqtt/PublishHandlerTest.java   |    59 +
 .../iotdb/db/qp/plan/LogicalPlanSmallTest.java     |    15 +-
 .../apache/iotdb/db/qp/plan/PhysicalPlanTest.java  |   201 +-
 .../db/query/control/FileReaderManagerTest.java    |     4 +-
 .../iotdb/db/query/reader/ReaderTestHelper.java    |     2 +-
 .../reader/series/SeriesAggregateReaderTest.java   |    76 +-
 .../reader/series/SeriesReaderByTimestampTest.java |    10 +-
 .../db/query/reader/series/SeriesReaderTest.java   |    25 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |    18 +-
 .../apache/iotdb/db/sql/CheckPathValidityTest.java |    49 +
 .../db/sync/receiver/load/FileLoaderTest.java      |    22 +-
 .../recover/SyncReceiverLogAnalyzerTest.java       |    26 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |    10 +-
 .../apache/iotdb/db/writelog/PerformanceTest.java  |    21 +-
 .../iotdb/db/writelog/recover/LogReplayerTest.java |    53 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |    89 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |    77 +-
 server/src/test/resources/logback.xml              |     4 +
 service-rpc/pom.xml                                |    55 +
 service-rpc/rpc-changelist.md                      |     3 +
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |     1 +
 service-rpc/src/main/thrift/rpc.thrift             |    19 +
 session/pom.xml                                    |     1 +
 .../main/java/org/apache/iotdb/session/Config.java |    13 -
 .../java/org/apache/iotdb/session/Session.java     |    93 +-
 .../org/apache/iotdb/session/SessionUtils.java     |     4 +-
 .../org/apache/iotdb/session/pool/SessionPool.java |   119 +-
 .../iotdb/session/CheckPathValidityTest.java       |    49 -
 .../org/apache/iotdb/session/IoTDBSessionIT.java   |   159 +-
 .../apache/iotdb/session/pool/SessionPoolTest.java |     4 +-
 site/README-zh.md                                  |   206 +
 site/README.md                                     |   207 +
 site/pom.xml                                       |   389 +
 site/src/main/.vuepress/config.js                  |   901 +
 site/src/main/.vuepress/enhanceApp.js              |    31 +
 site/src/main/.vuepress/public/img/arrow.png       |   Bin 0 -> 88 bytes
 .../public/img/contributor-avatar/jlq.png          |   Bin 0 -> 122303 bytes
 .../public/img/contributor-avatar/kfx.jpeg         |   Bin 0 -> 134257 bytes
 .../public/img/contributor-avatar/user.svg         |    51 +
 .../public/img/contributor-avatar/xdh.jpg          |   Bin 0 -> 136069 bytes
 .../.vuepress/public/img/contributor-avatar/yt.jpg |   Bin 0 -> 131028 bytes
 .../public/img/contributor-avatar/zss.jpg          |   Bin 0 -> 98085 bytes
 site/src/main/.vuepress/public/img/home-Slide1.png |   Bin 0 -> 438294 bytes
 site/src/main/.vuepress/public/img/home-Slide2.png |   Bin 0 -> 440893 bytes
 site/src/main/.vuepress/public/img/home-Slide3.png |   Bin 0 -> 441335 bytes
 site/src/main/.vuepress/public/img/home-icon1.png  |   Bin 0 -> 30032 bytes
 site/src/main/.vuepress/public/img/home-icon2.png  |   Bin 0 -> 5529 bytes
 site/src/main/.vuepress/public/img/home-icon3.png  |   Bin 0 -> 20637 bytes
 site/src/main/.vuepress/public/img/home-icon4.png  |   Bin 0 -> 13225 bytes
 site/src/main/.vuepress/public/img/home-icon5.png  |   Bin 0 -> 1989 bytes
 site/src/main/.vuepress/public/img/home-icon6.png  |   Bin 0 -> 16502 bytes
 site/src/main/.vuepress/public/img/logo.png        |   Bin 0 -> 31747 bytes
 site/src/main/.vuepress/public/img/tools.jpg       |   Bin 0 -> 347602 bytes
 site/src/main/.vuepress/styles/index.styl          |    23 +
 site/src/main/.vuepress/styles/palette.styl        |    23 +
 .../theme/components/AlgoliaSearchBox.vue          |   172 +
 .../.vuepress/theme/components/DropdownLink.vue    |   196 +
 .../theme/components/DropdownTransition.vue        |    50 +
 site/src/main/.vuepress/theme/components/Home.vue  |   179 +
 .../main/.vuepress/theme/components/NavLink.vue    |    65 +
 .../main/.vuepress/theme/components/NavLinks.vue   |   166 +
 .../src/main/.vuepress/theme/components/Navbar.vue |   139 +
 site/src/main/.vuepress/theme/components/Page.vue  |   278 +
 .../main/.vuepress/theme/components/Sidebar.vue    |    76 +
 .../.vuepress/theme/components/SidebarButton.vue   |    44 +
 .../.vuepress/theme/components/SidebarGroup.vue    |   146 +
 .../.vuepress/theme/components/SidebarLink.vue     |   126 +
 .../.vuepress/theme/components/SidebarLinks.vue    |   103 +
 .../.vuepress/theme/global-components/Badge.vue    |    61 +
 .../theme/global-components/Contributor.vue        |   348 +
 .../.vuepress/theme/global-components/IoTDB.vue    |   303 +
 .../.vuepress/theme/global-components/IoTDBZH.vue  |   295 +
 site/src/main/.vuepress/theme/index.js             |    63 +
 site/src/main/.vuepress/theme/layouts/404.vue      |    43 +
 site/src/main/.vuepress/theme/layouts/Layout.vue   |   166 +
 site/src/main/.vuepress/theme/styles/arrow.styl    |    39 +
 site/src/main/.vuepress/theme/styles/code.styl     |   166 +
 .../main/.vuepress/theme/styles/custom-blocks.styl |    47 +
 site/src/main/.vuepress/theme/styles/index.styl    |   227 +
 site/src/main/.vuepress/theme/styles/mobile.styl   |    54 +
 site/src/main/.vuepress/theme/styles/toc.styl      |    20 +
 site/src/main/.vuepress/theme/styles/wrapper.styl  |    26 +
 site/src/main/.vuepress/theme/util/index.js        |   256 +
 site/src/main/deploy.js                            |    25 +
 site/src/main/package.json                         |    43 +
 spark-iotdb-connector/Readme.md                    |     2 +-
 .../apache/iotdb/spark/db/EnvironmentUtils.java    |     5 +-
 spark-tsfile/README.md                             |     2 +-
 .../tsfile/qp/optimizer/PhysicalOptimizer.java     |    39 +-
 .../apache/iotdb/spark/tsfile/DefaultSource.scala  |     6 +-
 .../iotdb/spark/tsfile/NarrowConverter.scala       |    24 +-
 .../apache/iotdb/spark/tsfile/WideConverter.scala  |    36 +-
 .../org/apache/iotdb/spark/tsfile/package.scala    |    10 +-
 .../org/apache/iotdb/spark/tool/TsFileExample.java |    13 +-
 .../apache/iotdb/spark/tool/TsFileWriteTool.java   |    39 +-
 .../apache/iotdb/spark/tsfile/ConverterTest.scala  |     6 +-
 .../org/apache/iotdb/spark/tsfile/TSFileSuit.scala |    78 +-
 tsfile/format-changelist.md                        |    13 +-
 tsfile/pom.xml                                     |    55 +
 .../apache/iotdb/tsfile/common/cache/Cache.java    |     1 +
 .../iotdb/tsfile/common/conf/TSFileConfig.java     |    37 +-
 .../iotdb/tsfile/common/conf/TSFileDescriptor.java |    39 +-
 .../tsfile/common/constant/JsonFormatConstant.java |     6 +-
 .../tsfile/common/constant/QueryConstant.java      |     3 +-
 .../tsfile/common/constant/TsFileConstant.java     |     3 +-
 .../apache/iotdb/tsfile/compress/ICompressor.java  |    10 +-
 .../iotdb/tsfile/compress/IUnCompressor.java       |    12 +-
 .../tsfile/encoding/bitpacking/IntPacker.java      |    46 +-
 .../tsfile/encoding/bitpacking/LongPacker.java     |    51 +-
 .../tsfile/encoding/common/EncodingConfig.java     |     4 +-
 .../tsfile/encoding/decoder/BitmapDecoder.java     |    30 +-
 .../iotdb/tsfile/encoding/decoder/Decoder.java     |     5 +-
 .../encoding/decoder/DeltaBinaryDecoder.java       |     5 +-
 .../encoding/decoder/DoublePrecisionDecoder.java   |     6 +-
 .../tsfile/encoding/decoder/FloatDecoder.java      |    25 +-
 .../tsfile/encoding/decoder/GorillaDecoder.java    |     6 +-
 .../tsfile/encoding/decoder/IntRleDecoder.java     |    33 +-
 .../tsfile/encoding/decoder/LongRleDecoder.java    |    35 +-
 .../tsfile/encoding/decoder/PlainDecoder.java      |     5 +-
 .../encoding/decoder/RegularDataDecoder.java       |    10 +-
 .../iotdb/tsfile/encoding/decoder/RleDecoder.java  |    56 +-
 .../encoding/decoder/SinglePrecisionDecoder.java   |     8 +-
 .../tsfile/encoding/encoder/BitmapEncoder.java     |    29 +-
 .../encoding/encoder/DeltaBinaryEncoder.java       |    47 +-
 .../encoding/encoder/DoublePrecisionEncoder.java   |    12 +-
 .../iotdb/tsfile/encoding/encoder/Encoder.java     |    12 +-
 .../tsfile/encoding/encoder/FloatEncoder.java      |    13 +-
 .../tsfile/encoding/encoder/GorillaEncoder.java    |     4 +-
 .../tsfile/encoding/encoder/IntRleEncoder.java     |     1 +
 .../tsfile/encoding/encoder/LongRleEncoder.java    |     3 +-
 .../tsfile/encoding/encoder/PlainEncoder.java      |    41 +-
 .../encoding/encoder/RegularDataEncoder.java       |    43 +-
 .../iotdb/tsfile/encoding/encoder/RleEncoder.java  |    56 +-
 .../encoding/encoder/SinglePrecisionEncoder.java   |    12 +-
 .../tsfile/encoding/encoder/TSEncodingBuilder.java |    20 +-
 ...tion.java => NotCompatibleTsFileException.java} |     5 +-
 .../tsfile/exception/TsFileRuntimeException.java   |     4 +-
 .../tsfile/exception/cache/CacheException.java     |     5 +-
 .../CompressionTypeNotSupportedException.java      |     4 +-
 .../encoding/TsFileDecodingException.java          |     6 +-
 .../encoding/TsFileEncodingException.java          |     6 +-
 .../exception/write/NoMeasurementException.java    |     3 +-
 .../write/UnknownColumnTypeException.java          |     4 +-
 .../exception/write/WriteProcessException.java     |     1 -
 .../org/apache/iotdb/tsfile/file/MetaMarker.java   |     1 +
 .../iotdb/tsfile/file/footer/ChunkGroupFooter.java |    27 +-
 .../iotdb/tsfile/file/header/ChunkHeader.java      |    37 +-
 .../iotdb/tsfile/file/header/PageHeader.java       |    10 +
 .../iotdb/tsfile/file/header/package-info.java     |     9 +-
 .../tsfile/file/metadata/ChunkGroupMetaData.java   |   178 -
 .../metadata/ChunkGroupMetadata.java}              |    29 +-
 .../{ChunkMetaData.java => ChunkMetadata.java}     |    30 +-
 .../tsfile/file/metadata/TimeseriesMetadata.java   |   128 +
 .../tsfile/file/metadata/TsDeviceMetadata.java     |   142 -
 .../file/metadata/TsDeviceMetadataIndex.java       |   163 -
 .../iotdb/tsfile/file/metadata/TsFileMetaData.java |   423 -
 .../iotdb/tsfile/file/metadata/TsFileMetadata.java |   226 +
 .../tsfile/file/metadata/enums/TSDataType.java     |    18 +-
 .../tsfile/file/metadata/enums/TSFreqType.java     |    61 -
 .../file/metadata/statistics/BinaryStatistics.java |    28 +-
 .../metadata/statistics/BooleanStatistics.java     |    25 +-
 .../file/metadata/statistics/DoubleStatistics.java |    41 +-
 .../file/metadata/statistics/FloatStatistics.java  |    33 +-
 .../metadata/statistics/IntegerStatistics.java     |    33 +-
 .../file/metadata/statistics/LongStatistics.java   |    33 +-
 .../file/metadata/statistics/Statistics.java       |    56 +-
 .../iotdb/tsfile/fileSystem/FSFactoryProducer.java |     1 -
 .../fileInputFactory/HDFSInputFactory.java         |     7 +-
 .../fileInputFactory/LocalFSInputFactory.java      |     8 +-
 .../fileOutputFactory/HDFSOutputFactory.java       |     7 +-
 .../fileOutputFactory/LocalFSOutputFactory.java    |     8 +-
 .../tsfile/fileSystem/fsFactory/HDFSFactory.java   |    36 +-
 .../fileSystem/fsFactory/LocalFSFactory.java       |     1 +
 .../iotdb/tsfile/read/TsFileRestorableReader.java  |    18 +-
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |   553 +-
 .../iotdb/tsfile/read/UnClosedTsFileReader.java    |    16 +-
 .../apache/iotdb/tsfile/read/common/BatchData.java |    12 +
 .../org/apache/iotdb/tsfile/read/common/Chunk.java |     4 +-
 .../org/apache/iotdb/tsfile/read/common/Field.java |     5 +-
 .../org/apache/iotdb/tsfile/read/common/Path.java  |    37 +-
 .../apache/iotdb/tsfile/read/common/TimeRange.java |    18 +-
 .../read/controller/CachedChunkLoaderImpl.java     |    15 +-
 .../iotdb/tsfile/read/controller/IChunkLoader.java |     4 +-
 ...IChunkLoader.java => IChunkMetadataLoader.java} |    14 +-
 .../tsfile/read/controller/IMetadataQuerier.java   |    18 +-
 .../read/controller/MetadataQuerierByFileImpl.java |   190 +-
 .../tsfile/read/expression/ExpressionType.java     |    20 +-
 .../iotdb/tsfile/read/expression/IExpression.java  |     4 +-
 .../tsfile/read/expression/QueryExpression.java    |     3 +-
 .../read/expression/impl/BinaryExpression.java     |     1 +
 .../read/expression/impl/GlobalTimeExpression.java |     1 +
 .../expression/impl/SingleSeriesExpression.java    |     1 +
 .../read/expression/util/ExpressionOptimizer.java  |    13 +-
 .../query/executor/ExecutorWithTimeGenerator.java  |    35 +-
 .../tsfile/read/query/executor/TsFileExecutor.java |    16 +-
 .../read/query/timegenerator/TimeGenerator.java    |    44 +-
 .../query/timegenerator/TsFileTimeGenerator.java   |     6 +-
 .../read/query/timegenerator/node/AndNode.java     |    99 +-
 .../read/query/timegenerator/node/LeafNode.java    |    65 +-
 .../tsfile/read/query/timegenerator/node/Node.java |     5 +-
 .../read/query/timegenerator/node/OrNode.java      |   119 +-
 .../iotdb/tsfile/read/reader/IChunkReader.java     |     2 +-
 .../iotdb/tsfile/read/reader/IPageReader.java      |     2 +
 ...faultTsFileInput.java => LocalTsFileInput.java} |     4 +-
 .../iotdb/tsfile/read/reader/TsFileInput.java      |    71 +-
 .../tsfile/read/reader/chunk/ChunkReader.java      |     4 +-
 .../iotdb/tsfile/read/reader/page/PageReader.java  |     5 +
 .../reader/series/AbstractFileSeriesReader.java    |    20 +-
 .../read/reader/series/EmptyFileSeriesReader.java  |     6 +-
 .../read/reader/series/FileSeriesReader.java       |    12 +-
 .../reader/series/FileSeriesReaderByTimestamp.java |    20 +-
 .../tool/upgrade/TsfileUpgradeToolV0_8_0.java      |   543 -
 .../iotdb/tsfile/tool/upgrade/UpgradeTool.java     |   108 -
 .../java/org/apache/iotdb/tsfile/utils/Binary.java |     7 +-
 .../org/apache/iotdb/tsfile/utils/BloomFilter.java |     3 +-
 .../org/apache/iotdb/tsfile/utils/BytesUtils.java  |    21 +-
 .../java/org/apache/iotdb/tsfile/utils/Loader.java |     4 +-
 .../java/org/apache/iotdb/tsfile/utils/Pair.java   |     4 +-
 .../org/apache/iotdb/tsfile/utils/PublicBAOS.java  |    13 +-
 .../tsfile/utils/ReadWriteForEncodingUtils.java    |    65 +-
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |    86 +-
 .../apache/iotdb/tsfile/utils/StringContainer.java |    63 +-
 .../apache/iotdb/tsfile/utils/VersionUtils.java    |    37 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |   139 +-
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |     9 +-
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |     2 +-
 .../tsfile/write/chunk/IChunkGroupWriter.java      |     1 -
 .../apache/iotdb/tsfile/write/page/PageWriter.java |    30 +-
 .../apache/iotdb/tsfile/write/record/RowBatch.java |   135 +-
 .../apache/iotdb/tsfile/write/record/TSRecord.java |    18 +-
 .../write/record/datapoint/BooleanDataPoint.java   |     4 +-
 .../tsfile/write/record/datapoint/DataPoint.java   |     9 +-
 .../write/record/datapoint/DoubleDataPoint.java    |     4 +-
 .../write/record/datapoint/FloatDataPoint.java     |     4 +-
 .../write/record/datapoint/IntDataPoint.java       |     4 +-
 .../write/record/datapoint/LongDataPoint.java      |     4 +-
 .../write/record/datapoint/StringDataPoint.java    |     4 +-
 .../tsfile/write/schema/MeasurementSchema.java     |    49 +-
 .../apache/iotdb/tsfile/write/schema/Schema.java   |   139 +-
 .../iotdb/tsfile/write/schema/SchemaBuilder.java   |    93 -
 .../write/writer/ForceAppendTsFileWriter.java      |    39 +-
 ...ultTsFileOutput.java => LocalTsFileOutput.java} |    16 +-
 .../write/writer/RestorableTsFileIOWriter.java     |   191 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   330 +-
 .../iotdb/tsfile/write/writer/TsFileOutput.java    |    15 +-
 .../apache/iotdb/tsfile/common/LRUCacheTest.java   |     4 +-
 .../apache/iotdb/tsfile/compress/CompressTest.java |     6 +-
 .../apache/iotdb/tsfile/compress/SnappyTest.java   |    10 +-
 .../apache/iotdb/tsfile/constant/TestConstant.java |     8 +-
 .../tsfile/encoding/bitpacking/IntPackerTest.java  |     3 +
 .../tsfile/encoding/bitpacking/LongPackerTest.java |     5 +-
 .../tsfile/encoding/decoder/BitmapDecoderTest.java |     7 +-
 .../tsfile/encoding/decoder/FloatDecoderTest.java  |    23 +-
 .../encoding/decoder/GorillaDecoderTest.java       |    10 +-
 .../tsfile/encoding/decoder/IntRleDecoderTest.java |    10 +-
 .../encoding/decoder/LongRleDecoderTest.java       |    10 +-
 .../delta/DeltaBinaryEncoderIntegerTest.java       |    10 +-
 .../decoder/delta/DeltaBinaryEncoderLongTest.java  |    24 +-
 .../regular/RegularDataEncoderIntegerTest.java     |     5 +-
 .../regular/RegularDataEncoderLongTest.java        |    30 +-
 .../iotdb/tsfile/file/header/PageHeaderTest.java   |    12 +-
 .../file/metadata/ChunkGroupMetaDataTest.java      |   108 -
 .../file/metadata/TimeSeriesMetadataTest.java      |    23 +-
 .../file/metadata/TsDeviceMetadataIndexTest.java   |    77 -
 ...leMetaDataTest.java => TsFileMetadataTest.java} |    27 +-
 .../metadata/statistics/BooleanStatisticsTest.java |    27 +-
 .../metadata/statistics/DoubleStatisticsTest.java  |    29 +-
 .../metadata/statistics/FloatStatisticsTest.java   |    35 +-
 .../metadata/statistics/IntegerStatisticsTest.java |    29 +-
 .../metadata/statistics/LongStatisticsTest.java    |    32 +-
 .../metadata/statistics/StringStatisticsTest.java  |    33 +-
 .../tsfile/file/metadata/utils/TestHelper.java     |    62 +-
 .../iotdb/tsfile/file/metadata/utils/Utils.java    |   100 +-
 .../iotdb/tsfile/read/ReadInPartitionTest.java     |   112 +-
 .../iotdb/tsfile/read/ReadOnlyTsFileTest.java      |    36 +-
 .../org/apache/iotdb/tsfile/read/ReadTest.java     |    48 +-
 .../iotdb/tsfile/read/TimePlainEncodeReadTest.java |    67 +-
 .../tsfile/read/TsFileRestorableReaderTest.java    |     8 +-
 .../tsfile/read/TsFileSequenceReaderTest.java      |    57 +-
 .../apache/iotdb/tsfile/read/common/PathTest.java  |     2 -
 .../iotdb/tsfile/read/common/TimeRangeTest.java    |    35 +-
 .../tsfile/read/controller/ChunkLoaderTest.java    |    19 +-
 .../controller/IMetadataQuerierByFileImplTest.java |    97 +-
 .../read/filter/IExpressionOptimizerTest.java      |   109 +-
 .../read/filter/MinTimeMaxTimeFilterTest.java      |     4 +-
 .../iotdb/tsfile/read/filter/OperatorTest.java     |    12 +-
 .../tsfile/read/filter/StatisticsFilterTest.java   |     8 +-
 .../read/query/executor/QueryExecutorTest.java     |    39 +-
 .../tsfile/read/query/timegenerator/NodeTest.java  |    30 +-
 .../query/timegenerator}/ReadWriteTest.java        |    11 +-
 .../query/timegenerator/ReaderByTimestampTest.java |     8 +-
 .../timegenerator}/TimeGeneratorReadEmptyTest.java |     8 +-
 .../timegenerator}/TimeGeneratorReadWriteTest.java |     8 +-
 .../TsFileGeneratorForSeriesReaderByTimestamp.java |    52 +-
 .../tsfile/read/reader/FakedMultiBatchReader.java} |    42 +-
 .../tsfile/read/reader/FakedTimeGenerator.java     |    73 +
 .../iotdb/tsfile/read/reader/ReaderTest.java       |    14 +-
 .../apache/iotdb/tsfile/utils/BloomFilterTest.java |     5 +-
 .../apache/iotdb/tsfile/utils/BytesUtilsTest.java  |     4 +-
 .../apache/iotdb/tsfile/utils/FileGenerator.java   |    48 +-
 .../org/apache/iotdb/tsfile/utils/FileUtils.java   |    23 +-
 .../apache/iotdb/tsfile/utils/FileUtilsTest.java   |    20 +-
 .../org/apache/iotdb/tsfile/utils/PairTest.java    |     3 +
 .../tsfile/utils/ReadWriteStreamUtilsTest.java     |    15 +-
 .../tsfile/utils/ReadWriteToBytesUtilsTest.java    |     9 +-
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |    19 +-
 .../apache/iotdb/tsfile/utils/RecordUtilsTest.java |    27 +-
 .../iotdb/tsfile/utils/StringContainerTest.java    |     2 +
 .../iotdb/tsfile/utils/TsFileGeneratorForTest.java |    79 +-
 .../org/apache/iotdb/tsfile/write/PerfTest.java    |    53 +-
 .../iotdb/tsfile/write/ReadPageInMemTest.java      |    37 +-
 ...ameMeasurementsWithDifferentDataTypesTest.java} |   105 +-
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |    33 +-
 .../iotdb/tsfile/write/TsFileReadWriteTest.java    |    83 +-
 .../iotdb/tsfile/write/TsFileWriterTest.java       |    23 +-
 .../org/apache/iotdb/tsfile/write/WriteTest.java   |    77 +-
 .../write/schema/converter/SchemaBuilderTest.java  |    80 +-
 .../write/writer/ForceAppendTsFileWriterTest.java  |    61 +
 .../iotdb/tsfile/write/writer/PageWriterTest.java  |    20 +-
 .../write/writer/RestorableTsFileIOWriterTest.java |   161 +-
 tsfile/src/test/resources/logback.xml              |    12 +-
 786 files changed, 26065 insertions(+), 72104 deletions(-)


[incubator-iotdb] 02/02: init

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

xuekaifeng pushed a commit to branch IOTDB-615-Use-binary-rather-than-string-in-insert-plan
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit d4b3ed687b3c2c9b0a995ec442cd0371708992d9
Author: 151250176 <15...@smail.nju.edu.cn>
AuthorDate: Thu Apr 23 13:44:46 2020 +0800

    init
---
 .../main/java/org/apache/iotdb/SessionExample.java |  82 +++++----
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  32 ++--
 .../db/engine/storagegroup/TsFileProcessor.java    |   3 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  68 +++++--
 .../iotdb/db/qp/physical/crud/InsertPlan.java      | 200 ++++++++++++++++++---
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |  75 ++++++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 102 ++++++++---
 .../org/apache/iotdb/db/utils/CommonUtils.java     |  44 ++++-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |  23 ++-
 .../org/apache/iotdb/db/tools/WalCheckerTest.java  |  11 +-
 .../apache/iotdb/db/writelog/PerformanceTest.java  |   5 +-
 .../iotdb/db/writelog/WriteLogNodeManagerTest.java |   2 +
 .../apache/iotdb/db/writelog/WriteLogNodeTest.java |   6 +
 .../iotdb/db/writelog/io/LogWriterReaderTest.java  |   5 +-
 .../iotdb/db/writelog/recover/LogReplayerTest.java |  19 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |   7 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |  26 +--
 service-rpc/rpc-changelist.md                      |   3 +-
 service-rpc/src/main/thrift/rpc.thrift             |   4 +-
 .../java/org/apache/iotdb/session/Session.java     | 107 +++++++++--
 .../org/apache/iotdb/session/pool/SessionPool.java |  47 +++--
 .../org/apache/iotdb/session/IoTDBSessionIT.java   |  96 ++++++----
 .../apache/iotdb/session/pool/SessionPoolTest.java |  45 +++--
 .../java/org/apache/iotdb/tsfile/utils/Binary.java |   9 +-
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |  54 +++++-
 25 files changed, 806 insertions(+), 269 deletions(-)

diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
index 020188f..f3d5b55 100644
--- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
@@ -131,15 +131,20 @@ public class SessionExample {
   private static void insert() throws IoTDBConnectionException, StatementExecutionException {
     String deviceId = "root.sg1.d1";
     List<String> measurements = new ArrayList<>();
+    List<TSDataType> types = new ArrayList<>();
     measurements.add("s1");
     measurements.add("s2");
     measurements.add("s3");
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+
     for (long time = 0; time < 100; time++) {
-      List<String> values = new ArrayList<>();
-      values.add("1");
-      values.add("2");
-      values.add("3");
-      session.insert(deviceId, time, measurements, values);
+      List<Object> values = new ArrayList<>();
+      values.add(1L);
+      values.add(2L);
+      values.add(3L);
+      session.insert(deviceId, time, measurements, types, values);
     }
   }
 
@@ -147,11 +152,16 @@ public class SessionExample {
       throws IoTDBConnectionException, StatementExecutionException {
     String deviceId = "root.sg1.d1";
     List<String> measurements = new ArrayList<>();
+    List<TSDataType> types = new ArrayList<>();
     measurements.add("s1");
     measurements.add("s2");
     measurements.add("s3");
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+
     for (long time = 0; time < 100; time++) {
-      session.insert(deviceId, time, measurements, 1L, 1L, 1L);
+      session.insert(deviceId, time, measurements, types, 1L, 1L, 1L);
     }
   }
 
@@ -163,21 +173,27 @@ public class SessionExample {
     measurements.add("s3");
     List<String> deviceIds = new ArrayList<>();
     List<List<String>> measurementsList = new ArrayList<>();
-    List<List<String>> valuesList = new ArrayList<>();
+    List<List<Object>> valuesList = new ArrayList<>();
     List<Long> timestamps = new ArrayList<>();
+    List<List<TSDataType>> typesList = new ArrayList<>();
 
     for (long time = 0; time < 500; time++) {
-      List<String> values = new ArrayList<>();
-      values.add("1");
-      values.add("2");
-      values.add("3");
+      List<Object> values = new ArrayList<>();
+      List<TSDataType> types = new ArrayList<>();
+      values.add(1L);
+      values.add(2L);
+      values.add(3L);
+      types.add(TSDataType.INT64);
+      types.add(TSDataType.INT64);
+      types.add(TSDataType.INT64);
 
       deviceIds.add(deviceId);
       measurementsList.add(measurements);
       valuesList.add(values);
+      typesList.add(types);
       timestamps.add(time);
       if (time != 0 && time % 100 == 0) {
-        session.insertInBatch(deviceIds, timestamps, measurementsList, valuesList);
+        session.insertInBatch(deviceIds, timestamps, measurementsList, typesList, valuesList);
         deviceIds.clear();
         measurementsList.clear();
         valuesList.clear();
@@ -185,21 +201,16 @@ public class SessionExample {
       }
     }
 
-    session.insertInBatch(deviceIds, timestamps, measurementsList, valuesList);
+    session.insertInBatch(deviceIds, timestamps, measurementsList, typesList, valuesList);
   }
-
   /**
    * insert a batch data of one device, each batch contains multiple timestamps with values of
    * sensors
-   *
+   * <p>
    * a RowBatch example:
-   *
-   *      device1
-   * time s1, s2, s3
-   * 1,   1,  1,  1
-   * 2,   2,  2,  2
-   * 3,   3,  3,  3
-   *
+   * <p>
+   * device1 time s1, s2, s3 1,   1,  1,  1 2,   2,  2,  2 3,   3,  3,  3
+   * <p>
    * Users need to control the count of RowBatch and write a batch when it reaches the maxBatchSize
    */
   private static void insertRowBatch() throws IoTDBConnectionException, BatchExecutionException {
@@ -240,29 +251,36 @@ public class SessionExample {
       throws IoTDBConnectionException, BatchExecutionException {
     // The schema of sensors of one device
     Schema schema1 = new Schema();
-    schema1.registerTimeseries(new Path("root.sg1.d1.s1"), new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema1.registerTimeseries(new Path("root.sg1.d1.s2"), new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema1.registerTimeseries(new Path("root.sg1.d1.s3"), new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
+    schema1.registerTimeseries(new Path("root.sg1.d1.s1"),
+        new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
+    schema1.registerTimeseries(new Path("root.sg1.d1.s2"),
+        new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+    schema1.registerTimeseries(new Path("root.sg1.d1.s3"),
+        new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch1 = schema1.createRowBatch("root.sg1.d1", 100);
 
     Schema schema2 = new Schema();
-    schema2.registerTimeseries(new Path("root.sg1.d2.s1"), new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema2.registerTimeseries(new Path("root.sg1.d2.s2"), new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema2.registerTimeseries(new Path("root.sg1.d2.s3"), new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
+    schema2.registerTimeseries(new Path("root.sg1.d2.s1"),
+        new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
+    schema2.registerTimeseries(new Path("root.sg1.d2.s2"),
+        new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+    schema2.registerTimeseries(new Path("root.sg1.d2.s3"),
+        new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch2 = schema2.createRowBatch("root.sg1.d2", 100);
-    
+
     Schema schema3 = new Schema();
     Map<String, MeasurementSchema> template = new HashMap<>();
     template.put("s1", new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
     template.put("s2", new MeasurementSchema("s2", TSDataType.INT32, TSEncoding.RLE));
     schema3.registerDeviceTemplate("template3", template);
-    schema3.extendTemplate("template3", new MeasurementSchema("s3", TSDataType.FLOAT, TSEncoding.RLE));
+    schema3
+        .extendTemplate("template3", new MeasurementSchema("s3", TSDataType.FLOAT, TSEncoding.RLE));
     schema3.registerDevice("root.sg1.d3", "template3");
-    
+
     RowBatch rowBatch3 = schema3.createRowBatch("root.sg1.d3", 100);
-    
+
     Map<String, RowBatch> rowBatchMap = new HashMap<>();
     rowBatchMap.put("root.sg1.d1", rowBatch1);
     rowBatchMap.put("root.sg1.d2", rowBatch2);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index 7297c61..7a3b2f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -32,7 +32,6 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.rescon.TVListAllocator;
-import org.apache.iotdb.db.utils.CommonUtils;
 import org.apache.iotdb.db.utils.MemUtils;
 import org.apache.iotdb.db.utils.datastructure.TVList;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -41,12 +40,9 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 public abstract class AbstractMemTable implements IMemTable {
 
+  private final Map<String, Map<String, IWritableMemChunk>> memTableMap;
   private long version = Long.MAX_VALUE;
-
   private List<Modification> modifications = new ArrayList<>();
-
-  private final Map<String, Map<String, IWritableMemChunk>> memTableMap;
-
   private long memSize = 0;
 
   public AbstractMemTable() {
@@ -86,20 +82,14 @@ public abstract class AbstractMemTable implements IMemTable {
   protected abstract IWritableMemChunk genMemSeries(MeasurementSchema schema);
 
   @Override
-  public void insert(InsertPlan insertPlan) throws WriteProcessException {
-    try {
-      for (int i = 0; i < insertPlan.getValues().length; i++) {
-
-        Object value = CommonUtils.parseValue(insertPlan.getSchemas()[i].getType(),
-            insertPlan.getValues()[i]);
+  public void insert(InsertPlan insertPlan) {
+    for (int i = 0; i < insertPlan.getValues().length; i++) {
 
-        memSize += MemUtils.getRecordSize(insertPlan.getSchemas()[i].getType(), value);
+      Object value = insertPlan.getValues()[i];
+      memSize += MemUtils.getRecordSize(insertPlan.getSchemas()[i].getType(), value);
 
-        write(insertPlan.getDeviceId(), insertPlan.getMeasurements()[i],
-            insertPlan.getSchemas()[i], insertPlan.getTime(), value);
-      }
-    } catch (QueryProcessException e) {
-      throw new WriteProcessException(e.getMessage());
+      write(insertPlan.getDeviceId(), insertPlan.getMeasurements()[i],
+          insertPlan.getSchemas()[i], insertPlan.getTime(), value);
     }
   }
 
@@ -209,14 +199,14 @@ public abstract class AbstractMemTable implements IMemTable {
     this.modifications.add(deletion);
   }
 
-  public void setVersion(long version) {
-    this.version = version;
-  }
-
   public long getVersion() {
     return version;
   }
 
+  public void setVersion(long version) {
+    this.version = version;
+  }
+
   @Override
   public void release() {
     for (Entry<String, Map<String, IWritableMemChunk>> entry : memTableMap.entrySet()) {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
index ae81a7d..020de24 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessor.java
@@ -33,7 +33,6 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.adapter.ActiveTimeSeriesCounter;
 import org.apache.iotdb.db.conf.adapter.CompressionRatio;
 import org.apache.iotdb.db.conf.adapter.IoTDBConfigDynamicAdapter;
-import org.apache.iotdb.db.engine.cache.RamUsageEstimator;
 import org.apache.iotdb.db.engine.flush.FlushManager;
 import org.apache.iotdb.db.engine.flush.MemTableFlushTask;
 import org.apache.iotdb.db.engine.flush.NotifyFlushMemTable;
@@ -56,8 +55,8 @@ import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
 import org.apache.iotdb.db.writelog.node.WriteLogNode;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
+import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.iotdb.tsfile.utils.Pair;
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index b275838..838a6e7 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -18,6 +18,37 @@
  */
 package org.apache.iotdb.db.qp.executor;
 
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_CHILD_PATHS;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_COLUMN;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_COUNT;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_DEVICES;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_ITEM;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PARAMETER;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_PRIVILEGE;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_ROLE;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_STORAGE_GROUP;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TIMESERIES;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TIMESERIES_ALIAS;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TIMESERIES_COMPRESSION;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TIMESERIES_DATATYPE;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TIMESERIES_ENCODING;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_TTL;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_USER;
+import static org.apache.iotdb.db.conf.IoTDBConstant.COLUMN_VALUE;
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
+import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFFIX;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
 import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.auth.authorizer.IAuthorizer;
 import org.apache.iotdb.db.auth.authorizer.LocalFileAuthorizer;
@@ -45,8 +76,32 @@ import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode;
 import org.apache.iotdb.db.qp.logical.sys.AuthorOperator;
 import org.apache.iotdb.db.qp.logical.sys.AuthorOperator.AuthorType;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.db.qp.physical.crud.*;
-import org.apache.iotdb.db.qp.physical.sys.*;
+import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
+import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan;
+import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
+import org.apache.iotdb.db.qp.physical.crud.FillQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.GroupByFillPlan;
+import org.apache.iotdb.db.qp.physical.crud.GroupByPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.LastQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.QueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
+import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
+import org.apache.iotdb.db.qp.physical.sys.CountPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
+import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.dataset.AlignByDeviceDataSet;
 import org.apache.iotdb.db.query.dataset.ListDataSet;
@@ -78,12 +133,6 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-import static org.apache.iotdb.db.conf.IoTDBConstant.*;
-import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
-import static org.apache.iotdb.tsfile.common.constant.TsFileConstant.TSFILE_SUFFIX;
 
 public class PlanExecutor implements IPlanExecutor {
 
@@ -709,7 +758,6 @@ public class PlanExecutor implements IPlanExecutor {
       String[] measurementList = insertPlan.getMeasurements();
       String deviceId = insertPlan.getDeviceId();
       MNode node = mManager.getDeviceNodeWithAutoCreateStorageGroup(deviceId);
-      String[] strValues = insertPlan.getValues();
       MeasurementSchema[] schemas = new MeasurementSchema[measurementList.length];
 
       for (int i = 0; i < measurementList.length; i++) {
@@ -718,7 +766,7 @@ public class PlanExecutor implements IPlanExecutor {
           if (!IoTDBDescriptor.getInstance().getConfig().isAutoCreateSchemaEnabled()) {
             throw new PathNotExistException(deviceId + PATH_SEPARATOR + measurement);
           }
-          TSDataType dataType = TypeInferenceUtils.getPredictedDataType(strValues[i]);
+          TSDataType dataType = TypeInferenceUtils.getPredictedDataType(insertPlan.getValues()[i]);
           Path path = new Path(deviceId, measurement);
           internalCreateTimeseries(path.toString(), dataType);
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
index 5f334af..5924a0e 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertPlan.java
@@ -25,16 +25,18 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
-
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.utils.CommonUtils;
 import org.apache.iotdb.db.utils.TestOnly;
+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.Path;
+import org.apache.iotdb.tsfile.utils.Binary;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 import org.apache.iotdb.tsfile.write.record.TSRecord;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
@@ -44,8 +46,11 @@ public class InsertPlan extends PhysicalPlan {
   private long time;
   private String deviceId;
   private String[] measurements;
-  private String[] values;
+  private Object[] values;
+  private TSDataType[] types;
   private MeasurementSchema[] schemas;
+  // only for sql
+  private String[] strValueList;
 
   public InsertPlan() {
     super(false, OperatorType.INSERT);
@@ -53,12 +58,38 @@ public class InsertPlan extends PhysicalPlan {
   }
 
   @TestOnly
-  public InsertPlan(String deviceId, long insertTime, String measurement, String insertValue) {
+  public InsertPlan(String deviceId, long insertTime, String[] measurements, TSDataType[] types,
+      String[] insertValues) {
+    super(false, OperatorType.INSERT);
+    this.time = insertTime;
+    this.deviceId = deviceId;
+    this.measurements = measurements;
+
+    this.types = types;
+    this.values = new Object[measurements.length];
+    for (int i = 0; i < measurements.length; i++) {
+      try {
+        values[i] = CommonUtils.parseValueForTest(types[i], insertValues[i]);
+      } catch (QueryProcessException e) {
+        e.printStackTrace();
+      }
+    }
+    canbeSplit = false;
+  }
+
+  @TestOnly
+  public InsertPlan(String deviceId, long insertTime, String measurement, TSDataType type, String insertValue) {
     super(false, OperatorType.INSERT);
     this.time = insertTime;
     this.deviceId = deviceId;
-    this.measurements = new String[] {measurement};
-    this.values = new String[] {insertValue};
+    this.measurements = new String[]{measurement};
+    this.types = new TSDataType[]{type};
+    this.values = new Object[1];
+    try {
+      values[0] = CommonUtils.parseValueForTest(types[0], insertValue);
+    } catch (QueryProcessException e) {
+      e.printStackTrace();
+    }
     canbeSplit = false;
   }
 
@@ -68,25 +99,43 @@ public class InsertPlan extends PhysicalPlan {
     this.time = tsRecord.time;
     this.measurements = new String[tsRecord.dataPointList.size()];
     this.schemas = new MeasurementSchema[tsRecord.dataPointList.size()];
-    this.values = new String[tsRecord.dataPointList.size()];
+    this.types = new TSDataType[tsRecord.dataPointList.size()];
+    this.values = new Object[tsRecord.dataPointList.size()];
     for (int i = 0; i < tsRecord.dataPointList.size(); i++) {
       measurements[i] = tsRecord.dataPointList.get(i).getMeasurementId();
-      schemas[i] = new MeasurementSchema(measurements[i], tsRecord.dataPointList.get(i).getType(), TSEncoding.PLAIN);
-      values[i] = tsRecord.dataPointList.get(i).getValue().toString();
+      schemas[i] = new MeasurementSchema(measurements[i], tsRecord.dataPointList.get(i).getType(),
+          TSEncoding.PLAIN);
+      types[i] = tsRecord.dataPointList.get(i).getType();
+      values[i] = tsRecord.dataPointList.get(i).getValue();
     }
     canbeSplit = false;
   }
 
+  public InsertPlan(String deviceId, long insertTime, String[] measurementList, TSDataType[] types,
+      Object[] insertValues) {
+    super(false, Operator.OperatorType.INSERT);
+    this.time = insertTime;
+    this.deviceId = deviceId;
+    this.measurements = measurementList;
+    this.types = types;
+    this.values = insertValues;
+    canbeSplit = false;
+  }
+
   public InsertPlan(String deviceId, long insertTime, String[] measurementList,
       String[] insertValues) {
     super(false, Operator.OperatorType.INSERT);
     this.time = insertTime;
     this.deviceId = deviceId;
     this.measurements = measurementList;
-    this.values = insertValues;
+    // build types and values
+    this.types = new TSDataType[measurements.length];
+    this.values = new Object[measurements.length];
+    this.strValueList = insertValues;
     canbeSplit = false;
   }
 
+
   public long getTime() {
     return time;
   }
@@ -101,6 +150,17 @@ public class InsertPlan extends PhysicalPlan {
 
   public void setSchemas(MeasurementSchema[] schemas) {
     this.schemas = schemas;
+    if (strValueList != null) {
+      for (int i = 0; i < schemas.length; i++) {
+        types[i] = schemas[i].getType();
+        try {
+          values[i] = CommonUtils.parseValue(types[i], strValueList[i]);
+        } catch (QueryProcessException e) {
+          e.printStackTrace();
+        }
+      }
+      strValueList = null;
+    }
   }
 
   @Override
@@ -129,11 +189,11 @@ public class InsertPlan extends PhysicalPlan {
     this.measurements = measurements;
   }
 
-  public String[] getValues() {
+  public Object[] getValues() {
     return this.values;
   }
 
-  public void setValues(String[] values) {
+  public void setValues(Object[] values) {
     this.values = values;
   }
 
@@ -174,8 +234,102 @@ public class InsertPlan extends PhysicalPlan {
       schema.serializeTo(stream);
     }
 
-    for (String m : values) {
-      putString(stream, m);
+    try {
+      putValues(stream);
+    } catch (QueryProcessException e) {
+      throw new IOException(e);
+    }
+  }
+
+  private void putValues(DataOutputStream outputStream) throws QueryProcessException, IOException {
+    for (int i = 0; i < values.length; i++) {
+      ReadWriteIOUtils.write(types[i], outputStream);
+      switch (types[i]) {
+        case BOOLEAN:
+          ReadWriteIOUtils.write((Boolean) values[i], outputStream);
+          break;
+        case INT32:
+          ReadWriteIOUtils.write((Integer) values[i], outputStream);
+          break;
+        case INT64:
+          ReadWriteIOUtils.write((Long) values[i], outputStream);
+          break;
+        case FLOAT:
+          ReadWriteIOUtils.write((Float) values[i], outputStream);
+          break;
+        case DOUBLE:
+          ReadWriteIOUtils.write((Double) values[i], outputStream);
+          break;
+        case TEXT:
+          ReadWriteIOUtils.write((Binary) values[i], outputStream);
+          break;
+        default:
+          throw new QueryProcessException("Unsupported data type:" + types[i]);
+      }
+    }
+  }
+
+  private void putValues(ByteBuffer buffer) throws QueryProcessException {
+    for (int i = 0; i < values.length; i++) {
+      ReadWriteIOUtils.write(types[i], buffer);
+      switch (types[i]) {
+        case BOOLEAN:
+          ReadWriteIOUtils.write((Boolean) values[i], buffer);
+          break;
+        case INT32:
+          ReadWriteIOUtils.write((Integer) values[i], buffer);
+          break;
+        case INT64:
+          ReadWriteIOUtils.write((Long) values[i], buffer);
+          break;
+        case FLOAT:
+          ReadWriteIOUtils.write((Float) values[i], buffer);
+          break;
+        case DOUBLE:
+          ReadWriteIOUtils.write((Double) values[i], buffer);
+          break;
+        case TEXT:
+          ReadWriteIOUtils.write((Binary) values[i], buffer);
+          break;
+        default:
+          throw new QueryProcessException("Unsupported data type:" + types[i]);
+      }
+    }
+  }
+
+  public TSDataType[] getTypes() {
+    return types;
+  }
+
+  public void setTypes(TSDataType[] types) {
+    this.types = types;
+  }
+
+  public void getValues(ByteBuffer buffer) throws QueryProcessException {
+    for (int i = 0; i < measurements.length; i++) {
+      types[i] = ReadWriteIOUtils.readDataType(buffer);
+      switch (types[i]) {
+        case BOOLEAN:
+          values[i] = ReadWriteIOUtils.readBool(buffer);
+          break;
+        case INT32:
+          values[i] = ReadWriteIOUtils.readInt(buffer);
+          break;
+        case INT64:
+          values[i] = ReadWriteIOUtils.readLong(buffer);
+          break;
+        case FLOAT:
+          values[i] = ReadWriteIOUtils.readFloat(buffer);
+          break;
+        case DOUBLE:
+          values[i] = ReadWriteIOUtils.readDouble(buffer);
+          break;
+        case TEXT:
+          values[i] = ReadWriteIOUtils.readBinary(buffer);
+          break;
+        default:
+          throw new QueryProcessException("Unsupported data type:" + types[i]);
+      }
     }
   }
 
@@ -193,8 +347,10 @@ public class InsertPlan extends PhysicalPlan {
       putString(buffer, m);
     }
 
-    for (String m : values) {
-      putString(buffer, m);
+    try {
+      putValues(buffer);
+    } catch (QueryProcessException e) {
+      e.printStackTrace();
     }
   }
 
@@ -210,9 +366,12 @@ public class InsertPlan extends PhysicalPlan {
       measurements[i] = readString(buffer);
     }
 
-    this.values = new String[measurementSize];
-    for (int i = 0; i < measurementSize; i++) {
-      values[i] = readString(buffer);
+    this.types = new TSDataType[measurementSize];
+    this.values = new Object[measurementSize];
+    try {
+      getValues(buffer);
+    } catch (QueryProcessException e) {
+      e.printStackTrace();
     }
   }
 
@@ -225,7 +384,8 @@ public class InsertPlan extends PhysicalPlan {
     if (measurementIndex >= values.length) {
       return null;
     }
-    Object value = CommonUtils.parseValue(schemas[measurementIndex].getType(), values[measurementIndex]);
-    return new TimeValuePair(time, TsPrimitiveType.getByType(schemas[measurementIndex].getType(), value));
+    Object value = values[measurementIndex];
+    return new TimeValuePair(time,
+        TsPrimitiveType.getByType(schemas[measurementIndex].getType(), value));
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 5cfc547..f192091 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -18,6 +18,14 @@
  */
 package org.apache.iotdb.db.qp.strategy;
 
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.LogicalOperatorException;
@@ -27,21 +35,62 @@ import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.qp.constant.SQLConstant;
 import org.apache.iotdb.db.qp.logical.Operator;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
-import org.apache.iotdb.db.qp.logical.crud.*;
-import org.apache.iotdb.db.qp.logical.sys.*;
+import org.apache.iotdb.db.qp.logical.crud.BasicFunctionOperator;
+import org.apache.iotdb.db.qp.logical.crud.DeleteDataOperator;
+import org.apache.iotdb.db.qp.logical.crud.FilterOperator;
+import org.apache.iotdb.db.qp.logical.crud.InsertOperator;
+import org.apache.iotdb.db.qp.logical.crud.QueryOperator;
+import org.apache.iotdb.db.qp.logical.sys.AuthorOperator;
+import org.apache.iotdb.db.qp.logical.sys.CountOperator;
+import org.apache.iotdb.db.qp.logical.sys.CreateTimeSeriesOperator;
+import org.apache.iotdb.db.qp.logical.sys.DataAuthOperator;
+import org.apache.iotdb.db.qp.logical.sys.DeleteStorageGroupOperator;
+import org.apache.iotdb.db.qp.logical.sys.DeleteTimeSeriesOperator;
+import org.apache.iotdb.db.qp.logical.sys.LoadDataOperator;
+import org.apache.iotdb.db.qp.logical.sys.LoadFilesOperator;
+import org.apache.iotdb.db.qp.logical.sys.MoveFileOperator;
+import org.apache.iotdb.db.qp.logical.sys.RemoveFileOperator;
+import org.apache.iotdb.db.qp.logical.sys.SetStorageGroupOperator;
+import org.apache.iotdb.db.qp.logical.sys.SetTTLOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowChildPathsOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowDevicesOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowTTLOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowTimeSeriesOperator;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.db.qp.physical.crud.*;
+import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
+import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan;
 import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan.MeasurementType;
-import org.apache.iotdb.db.qp.physical.sys.*;
+import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
+import org.apache.iotdb.db.qp.physical.crud.FillQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.GroupByFillPlan;
+import org.apache.iotdb.db.qp.physical.crud.GroupByPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.LastQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.QueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.RawDataQueryPlan;
+import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
+import org.apache.iotdb.db.qp.physical.sys.CountPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
+import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
+import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
+import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowChildPathsPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowPlan.ShowContentType;
+import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
 import org.apache.iotdb.tsfile.utils.Pair;
 
-import java.util.*;
-
 /**
  * Used to convert logical operator to physical plan
  */
@@ -93,6 +142,7 @@ public class PhysicalGenerator {
           throw new LogicalOperatorException(
               "For Insert command, cannot specified more than one seriesPath: " + paths);
         }
+
         return new InsertPlan(paths.get(0).getFullPath(), insert.getTime(),
             insert.getMeasurementList(),
             insert.getValueList());
@@ -188,14 +238,14 @@ public class PhysicalGenerator {
       ((GroupByFillPlan) queryPlan).setSlidingStep(queryOperator.getSlidingStep());
       ((GroupByFillPlan) queryPlan).setLeftCRightO(queryOperator.isLeftCRightO());
       if (!queryOperator.isLeftCRightO()) {
-        ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime()+1);
-        ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime()+1);
+        ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime() + 1);
+        ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime() + 1);
       } else {
         ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime());
         ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime());
       }
       ((GroupByFillPlan) queryPlan)
-              .setAggregations(queryOperator.getSelectOperator().getAggregations());
+          .setAggregations(queryOperator.getSelectOperator().getAggregations());
       for (String aggregation : queryPlan.getAggregations()) {
         if (!SQLConstant.LAST_VALUE.equals(aggregation)) {
           throw new QueryProcessException("Group By Fill only support last_value function");
@@ -208,8 +258,8 @@ public class PhysicalGenerator {
       ((GroupByPlan) queryPlan).setSlidingStep(queryOperator.getSlidingStep());
       ((GroupByPlan) queryPlan).setLeftCRightO(queryOperator.isLeftCRightO());
       if (!queryOperator.isLeftCRightO()) {
-        ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime()+1);
-        ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime()+1);
+        ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime() + 1);
+        ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime() + 1);
       } else {
         ((GroupByPlan) queryPlan).setStartTime(queryOperator.getStartTime());
         ((GroupByPlan) queryPlan).setEndTime(queryOperator.getEndTime());
@@ -490,7 +540,8 @@ public class PhysicalGenerator {
       Set<String> columnSet = new HashSet<>();
       int index = 0;
       for (Pair<Path, Integer> indexedPath : indexedPaths) {
-        String column = aggregations.get(indexedPath.right) + "(" + indexedPath.left.toString() + ")";
+        String column =
+            aggregations.get(indexedPath.right) + "(" + indexedPath.left.toString() + ")";
         if (!columnSet.contains(column)) {
           aggregationPlan.addDeduplicatedPaths(indexedPath.left);
           TSDataType seriesType = dataTypes.get(indexedPath.right);
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 1b98a70..ac65ac0 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -18,6 +18,24 @@
  */
 package org.apache.iotdb.db.service;
 
+import static org.apache.iotdb.db.conf.IoTDBConfig.PATH_PATTERN;
+import static org.apache.iotdb.db.qp.physical.sys.ShowPlan.ShowContentType.TIMESERIES;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.sql.SQLException;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
 import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.apache.iotdb.db.auth.AuthException;
 import org.apache.iotdb.db.auth.AuthorityChecker;
@@ -43,9 +61,19 @@ import org.apache.iotdb.db.qp.executor.IPlanExecutor;
 import org.apache.iotdb.db.qp.executor.PlanExecutor;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
-import org.apache.iotdb.db.qp.physical.crud.*;
+import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan;
 import org.apache.iotdb.db.qp.physical.crud.AlignByDevicePlan.MeasurementType;
-import org.apache.iotdb.db.qp.physical.sys.*;
+import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.LastQueryPlan;
+import org.apache.iotdb.db.qp.physical.crud.QueryPlan;
+import org.apache.iotdb.db.qp.physical.sys.AuthorPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowPlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.query.dataset.NonAlignEngineDataSet;
@@ -55,9 +83,34 @@ import org.apache.iotdb.db.tools.watermark.WatermarkEncoder;
 import org.apache.iotdb.db.utils.QueryDataSetUtils;
 import org.apache.iotdb.db.utils.SchemaUtils;
 import org.apache.iotdb.rpc.RpcUtils;
-import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.rpc.TSStatusCode;
-import org.apache.iotdb.service.rpc.thrift.*;
+import org.apache.iotdb.service.rpc.thrift.ServerProperties;
+import org.apache.iotdb.service.rpc.thrift.TSBatchInsertionReq;
+import org.apache.iotdb.service.rpc.thrift.TSCancelOperationReq;
+import org.apache.iotdb.service.rpc.thrift.TSCloseOperationReq;
+import org.apache.iotdb.service.rpc.thrift.TSCloseSessionReq;
+import org.apache.iotdb.service.rpc.thrift.TSCreateMultiTimeseriesReq;
+import org.apache.iotdb.service.rpc.thrift.TSCreateTimeseriesReq;
+import org.apache.iotdb.service.rpc.thrift.TSDeleteDataReq;
+import org.apache.iotdb.service.rpc.thrift.TSExecuteBatchStatementReq;
+import org.apache.iotdb.service.rpc.thrift.TSExecuteBatchStatementResp;
+import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementReq;
+import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementResp;
+import org.apache.iotdb.service.rpc.thrift.TSFetchMetadataReq;
+import org.apache.iotdb.service.rpc.thrift.TSFetchMetadataResp;
+import org.apache.iotdb.service.rpc.thrift.TSFetchResultsReq;
+import org.apache.iotdb.service.rpc.thrift.TSFetchResultsResp;
+import org.apache.iotdb.service.rpc.thrift.TSGetTimeZoneResp;
+import org.apache.iotdb.service.rpc.thrift.TSIService;
+import org.apache.iotdb.service.rpc.thrift.TSInsertInBatchReq;
+import org.apache.iotdb.service.rpc.thrift.TSInsertReq;
+import org.apache.iotdb.service.rpc.thrift.TSOpenSessionReq;
+import org.apache.iotdb.service.rpc.thrift.TSOpenSessionResp;
+import org.apache.iotdb.service.rpc.thrift.TSProtocolVersion;
+import org.apache.iotdb.service.rpc.thrift.TSQueryDataSet;
+import org.apache.iotdb.service.rpc.thrift.TSQueryNonAlignDataSet;
+import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
+import org.apache.iotdb.service.rpc.thrift.TSStatus;
 import org.apache.iotdb.tsfile.exception.filter.QueryFilterOptimizationException;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -70,18 +123,6 @@ import org.apache.thrift.server.ServerContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.sql.SQLException;
-import java.time.ZoneId;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
-
-import static org.apache.iotdb.db.conf.IoTDBConfig.PATH_PATTERN;
-import static org.apache.iotdb.db.qp.physical.sys.ShowPlan.ShowContentType.TIMESERIES;
-
 
 /**
  * Thrift RPC implementation at server side.
@@ -1049,15 +1090,22 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
 
     InsertPlan plan = new InsertPlan();
     for (int i = 0; i < req.deviceIds.size(); i++) {
-      plan.setDeviceId(req.getDeviceIds().get(i));
-      plan.setTime(req.getTimestamps().get(i));
-      plan.setMeasurements(req.getMeasurementsList().get(i).toArray(new String[0]));
-      plan.setValues(req.getValuesList().get(i).toArray(new String[0]));
-      TSStatus status = checkAuthority(plan, req.getSessionId());
-      if (status != null) {
-        resp.addToStatusList(status);
-      } else {
-        resp.addToStatusList(executePlan(plan));
+      try {
+        plan.setDeviceId(req.getDeviceIds().get(i));
+        plan.setTime(req.getTimestamps().get(i));
+        plan.setMeasurements(req.getMeasurementsList().get(i).toArray(new String[0]));
+        plan.setTypes(new TSDataType[plan.getMeasurements().length]);
+        plan.setValues(new Object[plan.getMeasurements().length]);
+        plan.getValues(req.valuesList.get(i));
+        TSStatus status = checkAuthority(plan, req.getSessionId());
+        if (status != null) {
+          resp.addToStatusList(status);
+        } else {
+          resp.addToStatusList(executePlan(plan));
+        }
+      }
+      catch (Exception e) {
+        logger.error("meet error when insert in batch", e);
       }
     }
 
@@ -1094,7 +1142,9 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext {
       plan.setDeviceId(req.getDeviceId());
       plan.setTime(req.getTimestamp());
       plan.setMeasurements(req.getMeasurements().toArray(new String[0]));
-      plan.setValues(req.getValues().toArray(new String[0]));
+      plan.setTypes(new TSDataType[plan.getMeasurements().length]);
+      plan.setValues(new Object[plan.getMeasurements().length]);
+      plan.getValues(req.values);
 
       TSStatus status = checkAuthority(plan, req.getSessionId());
       if (status != null) {
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
index 3f9e43a..c6575de 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/CommonUtils.java
@@ -31,7 +31,8 @@ import org.apache.iotdb.tsfile.utils.Binary;
 
 public class CommonUtils {
 
-  private CommonUtils(){}
+  private CommonUtils() {
+  }
 
   /**
    * get JDK version.
@@ -72,7 +73,8 @@ public class CommonUtils {
       switch (dataType) {
         case BOOLEAN:
           value = value.toLowerCase();
-          if (SQLConstant.BOOLEAN_FALSE_NUM.equals(value) || SQLConstant.BOOLEN_FALSE.equals(value)) {
+          if (SQLConstant.BOOLEAN_FALSE_NUM.equals(value) || SQLConstant.BOOLEN_FALSE
+              .equals(value)) {
             return false;
           }
           if (SQLConstant.BOOLEAN_TRUE_NUM.equals(value) || SQLConstant.BOOLEN_TRUE.equals(value)) {
@@ -89,14 +91,48 @@ public class CommonUtils {
           return Double.parseDouble(value);
         case TEXT:
           if ((value.startsWith(SQLConstant.QUOTE) && value.endsWith(SQLConstant.QUOTE))
-                  || (value.startsWith(SQLConstant.DQUOTE) && value.endsWith(SQLConstant.DQUOTE))) {
+              || (value.startsWith(SQLConstant.DQUOTE) && value.endsWith(SQLConstant.DQUOTE))) {
             if (value.length() == 1) {
               return new Binary(value);
             } else {
               return new Binary(value.substring(1, value.length() - 1));
             }
           }
-          throw new QueryProcessException("The TEXT data type should be covered by \" or '");
+
+          return new Binary(value);
+        default:
+          throw new QueryProcessException("Unsupported data type:" + dataType);
+      }
+    } catch (NumberFormatException e) {
+      throw new QueryProcessException(e.getMessage());
+    }
+  }
+
+  @TestOnly
+  public static Object parseValueForTest(TSDataType dataType, String value)
+      throws QueryProcessException {
+    try {
+      switch (dataType) {
+        case BOOLEAN:
+          value = value.toLowerCase();
+          if (SQLConstant.BOOLEAN_FALSE_NUM.equals(value) || SQLConstant.BOOLEN_FALSE
+              .equals(value)) {
+            return false;
+          }
+          if (SQLConstant.BOOLEAN_TRUE_NUM.equals(value) || SQLConstant.BOOLEN_TRUE.equals(value)) {
+            return true;
+          }
+          throw new QueryProcessException("The BOOLEAN should be true/TRUE, false/FALSE or 0/1");
+        case INT32:
+          return Integer.parseInt(value);
+        case INT64:
+          return Long.parseLong(value);
+        case FLOAT:
+          return Float.parseFloat(value);
+        case DOUBLE:
+          return Double.parseDouble(value);
+        case TEXT:
+          return new Binary(value);
         default:
           throw new QueryProcessException("Unsupported data type:" + dataType);
       }
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
index f627484..18598a4 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
@@ -20,6 +20,17 @@
 
 package org.apache.iotdb.db.engine.storagegroup;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.directories.DirectoryManager;
@@ -57,12 +68,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
-import static org.junit.Assert.*;
-
 public class TTLTest {
 
   private String sg1 = "root.TTL_SG1";
@@ -126,7 +131,8 @@ public class TTLTest {
     insertPlan.setDeviceId(sg1);
     insertPlan.setTime(System.currentTimeMillis());
     insertPlan.setMeasurements(new String[]{"s1"});
-    insertPlan.setValues(new String[]{"1"});
+    insertPlan.setTypes(new TSDataType[]{TSDataType.INT64});
+    insertPlan.setValues(new Object[]{1L});
     insertPlan.setSchemas(
         new MeasurementSchema[]{new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN)});
 
@@ -152,7 +158,8 @@ public class TTLTest {
     insertPlan.setDeviceId(sg1);
     insertPlan.setTime(System.currentTimeMillis());
     insertPlan.setMeasurements(new String[]{"s1"});
-    insertPlan.setValues(new String[]{"1"});
+    insertPlan.setTypes(new TSDataType[]{TSDataType.INT64});
+    insertPlan.setValues(new Object[]{1L});
     insertPlan.setSchemas(
         new MeasurementSchema[]{new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN)});
 
diff --git a/server/src/test/java/org/apache/iotdb/db/tools/WalCheckerTest.java b/server/src/test/java/org/apache/iotdb/db/tools/WalCheckerTest.java
index 1e7401a..2dc30bc 100644
--- a/server/src/test/java/org/apache/iotdb/db/tools/WalCheckerTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/tools/WalCheckerTest.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.db.constant.TestConstant;
 import org.apache.iotdb.db.exception.SystemCheckException;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.writelog.io.LogWriter;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.junit.Test;
 
 public class WalCheckerTest {
@@ -73,12 +74,13 @@ public class WalCheckerTest {
         LogWriter logWriter = new LogWriter(subDir.getPath() + File.separator
             + WAL_FILE_NAME);
 
-        ByteBuffer binaryPlans = ByteBuffer.allocate(64*1024);
+        ByteBuffer binaryPlans = ByteBuffer.allocate(64 * 1024);
         String deviceId = "device1";
         String[] measurements = new String[]{"s1", "s2", "s3"};
+        TSDataType[] types = new TSDataType[]{TSDataType.INT64, TSDataType.INT64, TSDataType.INT64};
         String[] values = new String[]{"5", "6", "7"};
         for (int j = 0; j < 10; j++) {
-          new InsertPlan(deviceId, j, measurements, values).serializeTo(binaryPlans);
+          new InsertPlan(deviceId, j, measurements, types, values).serializeTo(binaryPlans);
         }
         binaryPlans.flip();
         logWriter.write(binaryPlans);
@@ -106,12 +108,13 @@ public class WalCheckerTest {
         LogWriter logWriter = new LogWriter(subDir.getPath() + File.separator
             + WAL_FILE_NAME);
 
-        ByteBuffer binaryPlans = ByteBuffer.allocate(64*1024);
+        ByteBuffer binaryPlans = ByteBuffer.allocate(64 * 1024);
         String deviceId = "device1";
         String[] measurements = new String[]{"s1", "s2", "s3"};
+        TSDataType[] types = new TSDataType[]{TSDataType.INT64, TSDataType.INT64, TSDataType.INT64};
         String[] values = new String[]{"5", "6", "7"};
         for (int j = 0; j < 10; j++) {
-          new InsertPlan(deviceId, j, measurements, values).serializeTo(binaryPlans);
+          new InsertPlan(deviceId, j, measurements, types, values).serializeTo(binaryPlans);
         }
         if (i > 2) {
           binaryPlans.put("not a wal".getBytes());
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
index b118f05..269f93c 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
@@ -88,6 +88,7 @@ public class PerformanceTest {
         for (int i = 0; i < 1000000; i++) {
           InsertPlan bwInsertPlan = new InsertPlan("logTestDevice", 100,
               new String[]{"s1", "s2", "s3", "s4"},
+              new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
               new String[]{"1.0", "15", "str", "false"});
           UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0",
               new Path("root.logTestDevice.s1"));
@@ -147,7 +148,9 @@ public class PerformanceTest {
 
     for (int i = 0; i < 1000000; i++) {
       InsertPlan bwInsertPlan = new InsertPlan("root.logTestDevice", 100,
-          new String[]{"s1", "s2", "s3", "s4"}, new String[]{"1.0", "15", "str", "false"});
+          new String[]{"s1", "s2", "s3", "s4"},
+          new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
+          new String[]{"1.0", "15", "str", "false"});
       UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0",
           new Path("root.logTestDevice.s1"));
       DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
index 4aa8297..7125d88 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
 import org.apache.iotdb.db.writelog.manager.WriteLogNodeManager;
 import org.apache.iotdb.db.writelog.node.WriteLogNode;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.junit.After;
 import org.junit.Before;
@@ -86,6 +87,7 @@ public class WriteLogNodeManagerTest {
 
     InsertPlan bwInsertPlan = new InsertPlan("logTestDevice", 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", "str", "false"});
     DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
 
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
index 63a5931..953a76e 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
@@ -32,6 +32,7 @@ import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.db.writelog.io.ILogReader;
 import org.apache.iotdb.db.writelog.node.ExclusiveWriteLogNode;
 import org.apache.iotdb.db.writelog.node.WriteLogNode;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.junit.After;
 import org.junit.Before;
@@ -66,6 +67,7 @@ public class WriteLogNodeTest {
 
     InsertPlan bwInsertPlan = new InsertPlan(identifier, 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", "str", "false"});
     DeletePlan deletePlan = new DeletePlan(50, new Path(identifier + ".s1"));
 
@@ -96,6 +98,7 @@ public class WriteLogNodeTest {
 
     InsertPlan bwInsertPlan = new InsertPlan(identifier, 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", "str", "false"});
     DeletePlan deletePlan = new DeletePlan(50, new Path(identifier + ".s1"));
 
@@ -132,6 +135,7 @@ public class WriteLogNodeTest {
 
     InsertPlan bwInsertPlan = new InsertPlan("root.logTestDevice", 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", "str", "false"});
     DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
 
@@ -157,6 +161,7 @@ public class WriteLogNodeTest {
 
     InsertPlan bwInsertPlan = new InsertPlan("logTestDevice", 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", "str", "false"});
     DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
 
@@ -181,6 +186,7 @@ public class WriteLogNodeTest {
 
     InsertPlan bwInsertPlan = new InsertPlan("root.logTestDevice.oversize", 100,
         new String[]{"s1", "s2", "s3", "s4"},
+        new TSDataType[]{TSDataType.DOUBLE, TSDataType.INT64, TSDataType.TEXT, TSDataType.BOOLEAN},
         new String[]{"1.0", "15", new String(new char[65 * 1024 * 1024]), "false"});
 
     boolean caught = false;
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/io/LogWriterReaderTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/io/LogWriterReaderTest.java
index 6dea9ac..b2e087e 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/io/LogWriterReaderTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/io/LogWriterReaderTest.java
@@ -29,6 +29,7 @@ import java.util.List;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.junit.Before;
 import org.junit.Test;
@@ -36,7 +37,7 @@ import org.junit.Test;
 public class LogWriterReaderTest {
 
   private static String filePath = "logtest.test";
-  ByteBuffer logsBuffer = ByteBuffer.allocate(64*1024);
+  ByteBuffer logsBuffer = ByteBuffer.allocate(64 * 1024);
   List<PhysicalPlan> plans = new ArrayList<>();
 
   @Before
@@ -45,8 +46,10 @@ public class LogWriterReaderTest {
       new File(filePath).delete();
     }
     InsertPlan insertPlan1 = new InsertPlan("d1", 10L, new String[]{"s1", "s2"},
+        new TSDataType[]{TSDataType.INT64, TSDataType.INT64},
         new String[]{"1", "2"});
     InsertPlan insertPlan2 = new InsertPlan("d1", 10L, new String[]{"s1", "s2"},
+        new TSDataType[]{TSDataType.INT64, TSDataType.INT64},
         new String[]{"1", "2"});
     DeletePlan deletePlan = new DeletePlan(10L, new Path("root.d1.s1"));
     plans.add(insertPlan1);
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/recover/LogReplayerTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/recover/LogReplayerTest.java
index fc1005c..37e263b 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/recover/LogReplayerTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/recover/LogReplayerTest.java
@@ -36,10 +36,10 @@ import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.engine.version.VersionController;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.StorageGroupProcessorException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.exception.StorageGroupProcessorException;
 import org.apache.iotdb.db.qp.physical.crud.DeletePlan;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
@@ -48,10 +48,9 @@ import org.apache.iotdb.db.writelog.node.WriteLogNode;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.iotdb.tsfile.read.reader.IPointReader;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.common.Path;
-import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.apache.iotdb.tsfile.read.reader.IPointReader;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -105,10 +104,13 @@ public class LogReplayerTest {
 
       WriteLogNode node =
           MultiFileLogNodeManager.getInstance().getNode(logNodePrefix + tsFile.getName());
-      node.write(new InsertPlan("root.sg.device0", 100, "sensor0", String.valueOf(0)));
-      node.write(new InsertPlan("root.sg.device0", 2, "sensor1", String.valueOf(0)));
+      node.write(
+          new InsertPlan("root.sg.device0", 100, "sensor0", TSDataType.INT64, String.valueOf(0)));
+      node.write(
+          new InsertPlan("root.sg.device0", 2, "sensor1", TSDataType.INT64, String.valueOf(0)));
       for (int i = 1; i < 5; i++) {
-        node.write(new InsertPlan("root.sg.device" + i, i, "sensor" + i, String.valueOf(i)));
+        node.write(new InsertPlan("root.sg.device" + i, i, "sensor" + i, TSDataType.INT64,
+            String.valueOf(i)));
       }
       DeletePlan deletePlan = new DeletePlan(200, new Path("root.sg.device0", "sensor0"));
       node.write(deletePlan);
@@ -117,8 +119,9 @@ public class LogReplayerTest {
       replayer.replayLogs();
 
       for (int i = 0; i < 5; i++) {
-        ReadOnlyMemChunk memChunk = memTable.query("root.sg.device" + i, "sensor" + i, TSDataType.INT64,
-            TSEncoding.RLE, Collections.emptyMap(), Long.MIN_VALUE);
+        ReadOnlyMemChunk memChunk = memTable
+            .query("root.sg.device" + i, "sensor" + i, TSDataType.INT64,
+                TSEncoding.RLE, Collections.emptyMap(), Long.MIN_VALUE);
         IPointReader iterator = memChunk.getPointReader();
         if (i == 0) {
           assertFalse(iterator.hasNextTimeValuePair());
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java
index 5c51d9a..ac5ae05 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/recover/SeqTsFileRecoverTest.java
@@ -142,17 +142,20 @@ public class SeqTsFileRecoverTest {
     for (int i = 10; i < 20; i++) {
       for (int j = 0; j < 10; j++) {
         String[] measurements = new String[10];
+        TSDataType[] types = new TSDataType[10];
         String[] values = new String[10];
         for (int k = 0; k < 10; k++) {
           measurements[k] = "sensor" + k;
+          types[k] = TSDataType.INT64;
           values[k] = String.valueOf(k);
         }
-        InsertPlan insertPlan = new InsertPlan("root.sg.device" + j, i, measurements, values);
+        InsertPlan insertPlan = new InsertPlan("root.sg.device" + j, i, measurements, types,
+            values);
         node.write(insertPlan);
       }
       node.notifyStartFlush();
     }
-    
+
     resource = new TsFileResource(tsF);
   }
 
diff --git a/server/src/test/java/org/apache/iotdb/db/writelog/recover/UnseqTsFileRecoverTest.java b/server/src/test/java/org/apache/iotdb/db/writelog/recover/UnseqTsFileRecoverTest.java
index b285dd0..016fb60 100644
--- a/server/src/test/java/org/apache/iotdb/db/writelog/recover/UnseqTsFileRecoverTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/writelog/recover/UnseqTsFileRecoverTest.java
@@ -19,6 +19,10 @@
 
 package org.apache.iotdb.db.writelog.recover;
 
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
 import java.util.Collections;
 import org.apache.commons.io.FileUtils;
 import org.apache.iotdb.db.conf.adapter.ActiveTimeSeriesCounter;
@@ -53,17 +57,12 @@ import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReader;
 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.Schema;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.apache.iotdb.tsfile.write.schema.Schema;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.io.File;
-import java.io.IOException;
-
-import static org.junit.Assert.assertEquals;
-
 public class UnseqTsFileRecoverTest {
 
   private File tsF;
@@ -96,7 +95,8 @@ public class UnseqTsFileRecoverTest {
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 10; j++) {
         Path path = new Path(("root.sg.device" + i), ("sensor" + j));
-        MeasurementSchema measurementSchema = new MeasurementSchema("sensor" + j, TSDataType.INT64, TSEncoding.PLAIN);
+        MeasurementSchema measurementSchema = new MeasurementSchema("sensor" + j, TSDataType.INT64,
+            TSEncoding.PLAIN);
         schema.registerTimeseries(path, measurementSchema);
         MManager.getInstance().createTimeseries(path.getFullPath(), measurementSchema.getType(),
             measurementSchema.getEncodingType(), measurementSchema.getCompressor(),
@@ -145,19 +145,22 @@ public class UnseqTsFileRecoverTest {
     for (int i = 0; i < 10; i++) {
       for (int j = 0; j < 10; j++) {
         String[] measurements = new String[10];
+        TSDataType[] types = new TSDataType[10];
         String[] values = new String[10];
         for (int k = 0; k < 10; k++) {
           measurements[k] = "sensor" + k;
+          types[k] = TSDataType.INT64;
           values[k] = String.valueOf(k + 10);
         }
-        InsertPlan insertPlan = new InsertPlan("root.sg.device" + j, i, measurements, values);
+        InsertPlan insertPlan = new InsertPlan("root.sg.device" + j, i, measurements, types,
+            values);
         node.write(insertPlan);
       }
       node.notifyStartFlush();
     }
-    InsertPlan insertPlan = new InsertPlan("root.sg.device99", 1, "sensor4", "4");
+    InsertPlan insertPlan = new InsertPlan("root.sg.device99", 1, "sensor4", TSDataType.INT64, "4");
     node.write(insertPlan);
-    insertPlan = new InsertPlan("root.sg.device99", 300, "sensor2", "2");
+    insertPlan = new InsertPlan("root.sg.device99", 300, "sensor2", TSDataType.INT64, "2");
     node.write(insertPlan);
     node.close();
 
@@ -176,7 +179,8 @@ public class UnseqTsFileRecoverTest {
   public void test() throws StorageGroupProcessorException, IOException {
     TsFileRecoverPerformer performer = new TsFileRecoverPerformer(logNodePrefix,
         versionController, resource, true, false);
-    ActiveTimeSeriesCounter.getInstance().init(resource.getFile().getParentFile().getParentFile().getName());
+    ActiveTimeSeriesCounter.getInstance()
+        .init(resource.getFile().getParentFile().getParentFile().getName());
     performer.recover();
 
     assertEquals(1, (long) resource.getStartTimeMap().get("root.sg.device99"));
diff --git a/service-rpc/rpc-changelist.md b/service-rpc/rpc-changelist.md
index 5a15ea8..43f5fcc 100644
--- a/service-rpc/rpc-changelist.md
+++ b/service-rpc/rpc-changelist.md
@@ -120,4 +120,5 @@ Last Updated on November 12th, 2019 by Tian Jiang.
 | Replace TS_SessionHandles with SessionIds, TSOperationHandle with queryIds  | Tian Jiang  |
 | Add optional TSQueryNonAlignDataSet in TSExecuteStatementResp, TSFetchResultsResp and required bool isAlign in TSFetchResultsReq | Haonan Hou |
 | Rename TSStatusType to TSStatus   | Jialin Qiao   |
-| Remove sessionId in TSExecuteBatchStatementResp   | Jialin Qiao   |
\ No newline at end of file
+| Remove sessionId in TSExecuteBatchStatementResp   | Jialin Qiao   |
+| Use TsDataType and binary rather than string in TSInsertInBatchReq and TSInsertReq  | Kaifeng Xue  |
\ No newline at end of file
diff --git a/service-rpc/src/main/thrift/rpc.thrift b/service-rpc/src/main/thrift/rpc.thrift
index a0faa41..47bb22c 100644
--- a/service-rpc/src/main/thrift/rpc.thrift
+++ b/service-rpc/src/main/thrift/rpc.thrift
@@ -169,7 +169,7 @@ struct TSInsertReq {
     1: required i64 sessionId
     2: required string deviceId
     3: required list<string> measurements
-    4: required list<string> values
+    4: required binary values
     5: required i64 timestamp
 }
 
@@ -187,7 +187,7 @@ struct TSInsertInBatchReq {
     1: required i64 sessionId
     2: required list<string> deviceIds
     3: required list<list<string>> measurementsList
-    4: required list<list<string>> valuesList
+    4: required list<binary> valuesList
     5: required list<i64> timestamps
 }
 
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 8ea83f6..0210d10 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.session;
 
+import java.nio.ByteBuffer;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -44,11 +45,13 @@ import org.apache.iotdb.service.rpc.thrift.TSOpenSessionResp;
 import org.apache.iotdb.service.rpc.thrift.TSProtocolVersion;
 import org.apache.iotdb.service.rpc.thrift.TSSetTimeZoneReq;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 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.utils.Binary;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 import org.apache.iotdb.tsfile.write.record.RowBatch;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 import org.apache.thrift.TException;
@@ -361,7 +364,8 @@ public class Session {
    * @see Session#insertBatch(RowBatch)
    */
   public void insertInBatch(List<String> deviceIds, List<Long> times,
-      List<List<String>> measurementsList, List<List<String>> valuesList)
+      List<List<String>> measurementsList, List<List<TSDataType>> typesList,
+      List<List<Object>> valuesList)
       throws IoTDBConnectionException, BatchExecutionException {
     // check params size
     int len = deviceIds.size();
@@ -375,7 +379,14 @@ public class Session {
     request.setDeviceIds(deviceIds);
     request.setTimestamps(times);
     request.setMeasurementsList(measurementsList);
-    request.setValuesList(valuesList);
+    List<ByteBuffer> buffersList = new ArrayList<>();
+    for (int i = 0; i < measurementsList.size(); i++) {
+      ByteBuffer buffer = ByteBuffer.allocate(calculateLength(typesList.get(i), valuesList.get(i)));
+      putValues(typesList.get(i), valuesList.get(i), buffer);
+      buffer.flip();
+      buffersList.add(buffer);
+    }
+    request.setValuesList(buffersList);
 
     try {
       RpcUtils.verifySuccess(client.insertRowInBatch(request).statusList);
@@ -388,34 +399,36 @@ public class Session {
    * insert data in one row, if you want improve your performance, please use insertInBatch method
    * or insertBatch method
    *
-   * @see Session#insertInBatch(List, List, List, List)
+   * @see Session#insertInBatch(List, List, List, List, List)
    * @see Session#insertBatch(RowBatch)
    */
   public TSStatus insert(String deviceId, long time, List<String> measurements,
+      List<TSDataType> types,
       Object... values) throws IoTDBConnectionException, StatementExecutionException {
-    List<String> stringValues = new ArrayList<>();
-    for (Object o : values) {
-      stringValues.add(o.toString());
-    }
+    List<Object> valuesList = new ArrayList<>(Arrays.asList(values));
 
-    return insert(deviceId, time, measurements, stringValues);
+    return insert(deviceId, time, measurements, types, valuesList);
   }
 
   /**
    * insert data in one row, if you want improve your performance, please use insertInBatch method
    * or insertBatch method
    *
-   * @see Session#insertInBatch(List, List, List, List)
+   * @see Session#insertInBatch(List, List, List, List, List)
    * @see Session#insertBatch(RowBatch)
    */
   public TSStatus insert(String deviceId, long time, List<String> measurements,
-      List<String> values) throws IoTDBConnectionException, StatementExecutionException {
+      List<TSDataType> types,
+      List<Object> values) throws IoTDBConnectionException, StatementExecutionException {
     TSInsertReq request = new TSInsertReq();
     request.setSessionId(sessionId);
     request.setDeviceId(deviceId);
     request.setTimestamp(time);
     request.setMeasurements(measurements);
-    request.setValues(values);
+    ByteBuffer buffer = ByteBuffer.allocate(calculateLength(types, values));
+    putValues(types, values, buffer);
+    buffer.flip();
+    request.setValues(buffer);
 
     TSStatus result;
     try {
@@ -428,6 +441,68 @@ public class Session {
     return result;
   }
 
+  private void putValues(List<TSDataType> types, List<Object> values, ByteBuffer buffer)
+      throws IoTDBConnectionException {
+    for (int i = 0; i < values.size(); i++) {
+      ReadWriteIOUtils.write(types.get(i), buffer);
+      switch (types.get(i)) {
+        case BOOLEAN:
+          ReadWriteIOUtils.write((Boolean) values.get(i), buffer);
+          break;
+        case INT32:
+          ReadWriteIOUtils.write((Integer) values.get(i), buffer);
+          break;
+        case INT64:
+          ReadWriteIOUtils.write((Long) values.get(i), buffer);
+          break;
+        case FLOAT:
+          ReadWriteIOUtils.write((Float) values.get(i), buffer);
+          break;
+        case DOUBLE:
+          ReadWriteIOUtils.write((Double) values.get(i), buffer);
+          break;
+        case TEXT:
+          ReadWriteIOUtils.write(new Binary((String) values.get(i)), buffer);
+          break;
+        default:
+          throw new IoTDBConnectionException("Unsupported data type:" + types.get(i));
+      }
+    }
+  }
+
+  private int calculateLength(List<TSDataType> types, List<Object> values)
+      throws IoTDBConnectionException {
+    int res = 0;
+    for (int i = 0; i < types.size(); i++) {
+      // types
+      res += Short.BYTES;
+      switch (types.get(i)) {
+        case BOOLEAN:
+          res += 1;
+          break;
+        case INT32:
+          res += Integer.BYTES;
+          break;
+        case INT64:
+          res += Long.BYTES;
+          break;
+        case FLOAT:
+          res += Float.BYTES;
+          break;
+        case DOUBLE:
+          res += Double.BYTES;
+          break;
+        case TEXT:
+          res += ((String) values.get(i)).getBytes(TSFileConfig.STRING_CHARSET).length;
+          break;
+        default:
+          throw new IoTDBConnectionException("Unsupported data type:" + types.get(i));
+      }
+    }
+
+    return res;
+  }
+
   /**
    * This method NOT insert data into database and the server just return after accept the request,
    * this method should be used to test other time cost in client
@@ -471,7 +546,7 @@ public class Session {
     request.setDeviceIds(deviceIds);
     request.setTimestamps(times);
     request.setMeasurementsList(measurementsList);
-    request.setValuesList(valuesList);
+    request.setValuesList(new ArrayList<>());
 
     try {
       RpcUtils.verifySuccess(client.testInsertRowInBatch(request).statusList);
@@ -491,7 +566,7 @@ public class Session {
     request.setDeviceId(deviceId);
     request.setTimestamp(time);
     request.setMeasurements(measurements);
-    request.setValues(values);
+    request.setValues(ByteBuffer.allocate(1));
 
     try {
       RpcUtils.verifySuccess(client.testInsertRow(request));
@@ -624,19 +699,19 @@ public class Session {
     request.setPaths(paths);
 
     List<Integer> dataTypeOrdinals = new ArrayList<>(paths.size());
-    for (TSDataType dataType: dataTypes) {
+    for (TSDataType dataType : dataTypes) {
       dataTypeOrdinals.add(dataType.ordinal());
     }
     request.setDataTypes(dataTypeOrdinals);
 
     List<Integer> encodingOrdinals = new ArrayList<>(paths.size());
-    for (TSEncoding encoding: encodings) {
+    for (TSEncoding encoding : encodings) {
       encodingOrdinals.add(encoding.ordinal());
     }
     request.setEncodings(encodingOrdinals);
 
     List<Integer> compressionOrdinals = new ArrayList<>(paths.size());
-    for (CompressionType compression: compressors) {
+    for (CompressionType compression : compressors) {
       compressionOrdinals.add(compression.ordinal());
     }
     request.setCompressors(compressionOrdinals);
diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
index e87cb03..8fef612 100644
--- a/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
+++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionPool.java
@@ -38,45 +38,40 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * SessionPool is a wrapper of a Session Set.
- * Using SessionPool, the user do not need to consider how to reuse a session connection.
- * Even if the session is disconnected, the session pool can recognize it and remove the broken
- * session connection and create a new one.
- *
+ * SessionPool is a wrapper of a Session Set. Using SessionPool, the user do not need to consider
+ * how to reuse a session connection. Even if the session is disconnected, the session pool can
+ * recognize it and remove the broken session connection and create a new one.
+ * <p>
  * If there is no available connections and the pool reaches its max size, the all methods will hang
  * until there is a available connection.
- *
+ * <p>
  * If a user has waited for a session for more than 60 seconds, a warn log will be printed.
- *
+ * <p>
  * The only thing you have to remember is that:
- *
+ * <p>
  * For a query, if you have get all data, i.e., SessionDataSetWrapper.hasNext() == false, it is ok.
- * Otherwise, i.e., you want to stop the query before you get all data (SessionDataSetWrapper.hasNext() == true),
- * then you have to call closeResultSet(SessionDataSetWrapper wrapper) manually.
- * Otherwise the connection is occupied by the query.
- *
- * Another case that you have to manually call closeResultSet() is that when there is exception
- * when you call SessionDataSetWrapper.hasNext() or next()
- *
+ * Otherwise, i.e., you want to stop the query before you get all data
+ * (SessionDataSetWrapper.hasNext() == true), then you have to call closeResultSet(SessionDataSetWrapper
+ * wrapper) manually. Otherwise the connection is occupied by the query.
+ * <p>
+ * Another case that you have to manually call closeResultSet() is that when there is exception when
+ * you call SessionDataSetWrapper.hasNext() or next()
  */
 public class SessionPool {
 
   private static final Logger logger = LoggerFactory.getLogger(SessionPool.class);
+  private static int RETRY = 3;
   private ConcurrentLinkedDeque<Session> queue = new ConcurrentLinkedDeque<>();
   //for session whose resultSet is not released.
   private ConcurrentMap<Session, Session> occupied = new ConcurrentHashMap<>();
-
   private int size = 0;
   private int maxSize = 0;
   private String ip;
   private int port;
   private String user;
   private String password;
-
   private int fetchSize;
-
   private long timeout; //ms
-  private static int RETRY = 3;
   private boolean enableCompression = false;
 
   public SessionPool(String ip, int port, String user, String password, int maxSize) {
@@ -335,12 +330,13 @@ public class SessionPool {
    * @see Session#insertBatch(RowBatch)
    */
   public void insertInBatch(List<String> deviceIds, List<Long> times,
-      List<List<String>> measurementsList, List<List<String>> valuesList)
+      List<List<String>> measurementsList, List<List<TSDataType>> typesList,
+      List<List<Object>> valuesList)
       throws IoTDBConnectionException, BatchExecutionException {
     for (int i = 0; i < RETRY; i++) {
       Session session = getSession();
       try {
-        session.insertInBatch(deviceIds, times, measurementsList, valuesList);
+        session.insertInBatch(deviceIds, times, measurementsList, typesList, valuesList);
         putBack(session);
         return;
       } catch (IoTDBConnectionException e) {
@@ -360,15 +356,16 @@ public class SessionPool {
    * insert data in one row, if you want improve your performance, please use insertInBatch method
    * or insertBatch method
    *
-   * @see Session#insertInBatch(List, List, List, List)
+   * @see Session#insertInBatch(List, List, List, List, List)
    * @see Session#insertBatch(RowBatch)
    */
-  public TSStatus insert(String deviceId, long time, List<String> measurements, List<String> values)
+  public TSStatus insert(String deviceId, long time, List<String> measurements,
+      List<TSDataType> types, List<Object> values)
       throws IoTDBConnectionException, StatementExecutionException {
     for (int i = 0; i < RETRY; i++) {
       Session session = getSession();
       try {
-        TSStatus resp = session.insert(deviceId, time, measurements, values);
+        TSStatus resp = session.insert(deviceId, time, measurements, types, values);
         putBack(session);
         return resp;
       } catch (IoTDBConnectionException e) {
@@ -544,7 +541,7 @@ public class SessionPool {
    * delete data <= time in multiple timeseries
    *
    * @param paths data in which time series to delete
-   * @param time data with time stamp less than or equal to time will be deleted
+   * @param time  data with time stamp less than or equal to time will be deleted
    */
   public void deleteData(List<String> paths, long time)
       throws IoTDBConnectionException, StatementExecutionException {
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
index fa0d79c..b24b82a 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIT.java
@@ -33,9 +33,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
-import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
 import org.apache.iotdb.rpc.BatchExecutionException;
@@ -57,6 +55,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class IoTDBSessionIT {
+
   private static Logger logger = LoggerFactory.getLogger(IoTDBSessionIT.class);
 
   private Session session;
@@ -207,9 +206,12 @@ public class IoTDBSessionIT {
 
     // test insert batch
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId, "s1"), new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId, "s2"), new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId, "s3"), new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s1"),
+        new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s2"),
+        new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s3"),
+        new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch = schema.createRowBatch("root.sg1.d1", 100);
 
@@ -412,10 +414,13 @@ public class IoTDBSessionIT {
         }
         String sensorId = ss[ss.length - 1];
         List<String> measurements = new ArrayList<>();
-        List<String> values = new ArrayList<>();
+        List<Object> values = new ArrayList<>();
+        List<TSDataType> types = new ArrayList<>();
+
         measurements.add(sensorId);
-        values.add("100");
-        session.insert(deviceId, i, measurements, values);
+        types.add(TSDataType.INT64);
+        values.add(100L);
+        session.insert(deviceId, i, measurements, types, values);
       }
     }
   }
@@ -428,21 +433,27 @@ public class IoTDBSessionIT {
     measurements.add("s3");
     List<String> deviceIds = new ArrayList<>();
     List<List<String>> measurementsList = new ArrayList<>();
-    List<List<String>> valuesList = new ArrayList<>();
+    List<List<Object>> valuesList = new ArrayList<>();
     List<Long> timestamps = new ArrayList<>();
+    List<List<TSDataType>> typesList = new ArrayList<>();
 
     for (long time = 0; time < 500; time++) {
-      List<String> values = new ArrayList<>();
-      values.add("1");
-      values.add("2");
-      values.add("3");
+      List<Object> values = new ArrayList<>();
+      List<TSDataType> types = new ArrayList<>();
+      values.add(1L);
+      values.add(2L);
+      values.add(3L);
+      types.add(TSDataType.INT64);
+      types.add(TSDataType.INT64);
+      types.add(TSDataType.INT64);
 
       deviceIds.add(deviceId);
       measurementsList.add(measurements);
       valuesList.add(values);
+      typesList.add(types);
       timestamps.add(time);
       if (time != 0 && time % 100 == 0) {
-        session.insertInBatch(deviceIds, timestamps, measurementsList, valuesList);
+        session.insertInBatch(deviceIds, timestamps, measurementsList, typesList, valuesList);
         deviceIds.clear();
         measurementsList.clear();
         valuesList.clear();
@@ -450,41 +461,54 @@ public class IoTDBSessionIT {
       }
     }
 
-    session.insertInBatch(deviceIds, timestamps, measurementsList, valuesList);
+    session.insertInBatch(deviceIds, timestamps, measurementsList, typesList, valuesList);
   }
 
   private void insertInObject() throws IoTDBConnectionException, StatementExecutionException {
     String deviceId = "root.sg1.d1";
     List<String> measurements = new ArrayList<>();
+    List<TSDataType> types = new ArrayList<>();
     measurements.add("s1");
     measurements.add("s2");
     measurements.add("s3");
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+
     for (long time = 0; time < 100; time++) {
-      session.insert(deviceId, time, measurements, 1L, 2L, 3L);
+      session.insert(deviceId, time, measurements, types,1L, 2L, 3L);
     }
   }
 
   private void insert() throws IoTDBConnectionException, StatementExecutionException {
     String deviceId = "root.sg1.d1";
     List<String> measurements = new ArrayList<>();
+    List<TSDataType> types = new ArrayList<>();
     measurements.add("s1");
     measurements.add("s2");
     measurements.add("s3");
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+    types.add(TSDataType.INT64);
+
     for (long time = 0; time < 100; time++) {
-      List<String> values = new ArrayList<>();
-      values.add("1");
-      values.add("2");
-      values.add("3");
-      session.insert(deviceId, time, measurements, values);
+      List<Object> values = new ArrayList<>();
+      values.add(1L);
+      values.add(2L);
+      values.add(3L);
+      session.insert(deviceId, time, measurements, types, values);
     }
   }
 
   private void insertRowBatchTest1(String deviceId)
       throws IoTDBConnectionException, BatchExecutionException {
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId, "s1"), new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId, "s2"), new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId, "s3"), new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s1"),
+        new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s2"),
+        new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
+    schema.registerTimeseries(new Path(deviceId, "s3"),
+        new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch = schema.createRowBatch(deviceId, 100);
 
@@ -754,11 +778,11 @@ public class IoTDBSessionIT {
   private void insertRowBatchTest2(String deviceId)
       throws IoTDBConnectionException, BatchExecutionException {
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId,"s1"), 
+    schema.registerTimeseries(new Path(deviceId, "s1"),
         new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s2"), 
+    schema.registerTimeseries(new Path(deviceId, "s2"),
         new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s3"), 
+    schema.registerTimeseries(new Path(deviceId, "s3"),
         new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch = schema.createRowBatch(deviceId, 256);
@@ -788,11 +812,11 @@ public class IoTDBSessionIT {
   private void insertRowBatchTest3(String deviceId)
       throws IoTDBConnectionException, BatchExecutionException {
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId,"s1"), 
+    schema.registerTimeseries(new Path(deviceId, "s1"),
         new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s2"), 
+    schema.registerTimeseries(new Path(deviceId, "s2"),
         new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s3"), 
+    schema.registerTimeseries(new Path(deviceId, "s3"),
         new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
 
     RowBatch rowBatch = schema.createRowBatch(deviceId, 200);
@@ -822,17 +846,17 @@ public class IoTDBSessionIT {
   private void insertRowBatchTestForTime(String deviceId)
       throws IoTDBConnectionException, BatchExecutionException {
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId,"s1"),
+    schema.registerTimeseries(new Path(deviceId, "s1"),
         new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s2"), 
+    schema.registerTimeseries(new Path(deviceId, "s2"),
         new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s3"), 
+    schema.registerTimeseries(new Path(deviceId, "s3"),
         new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s4"), 
+    schema.registerTimeseries(new Path(deviceId, "s4"),
         new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s5"), 
+    schema.registerTimeseries(new Path(deviceId, "s5"),
         new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
-    schema.registerTimeseries(new Path(deviceId,"s6"), 
+    schema.registerTimeseries(new Path(deviceId, "s6"),
         new MeasurementSchema("s3", TSDataType.INT64, TSEncoding.RLE));
     long count = 10000000;
     long begin = 0;
diff --git a/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java b/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
index 9b649aa..5923577 100644
--- a/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
+++ b/session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java
@@ -18,20 +18,20 @@
  */
 package org.apache.iotdb.session.pool;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import java.sql.SQLException;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
-import org.apache.thrift.TException;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -60,7 +60,8 @@ public class SessionPoolTest {
       final int no = i;
       service.submit(() -> {
         try {
-          pool.insert("root.sg1.d1", 1, Collections.singletonList("s" + no), Collections.singletonList("3"));
+          pool.insert("root.sg1.d1", 1, Collections.singletonList("s" + no),
+              Collections.singletonList(TSDataType.INT64), Collections.singletonList(3L));
         } catch (IoTDBConnectionException | StatementExecutionException e) {
           fail();
         }
@@ -83,7 +84,9 @@ public class SessionPoolTest {
     SessionPool pool = new SessionPool("127.0.0.1", 6667, "root", "root", 3);
     assertEquals(0, pool.currentAvailableSize());
     try {
-      pool.insert(".root.sg1.d1", 1, Collections.singletonList("s" ), Collections.singletonList("3"));
+      pool.insert(".root.sg1.d1", 1, Collections.singletonList("s"),
+          Collections.singletonList(TSDataType.INT64),
+          Collections.singletonList(3L));
     } catch (IoTDBConnectionException | StatementExecutionException e) {
       //do nothing
     }
@@ -98,7 +101,9 @@ public class SessionPoolTest {
     ExecutorService service = Executors.newFixedThreadPool(10);
     for (int i = 0; i < 10; i++) {
       try {
-        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i), Collections.singletonList("" + i));
+        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i),
+            Collections.singletonList(TSDataType.INT64),
+            Collections.singletonList((long) i));
       } catch (IoTDBConnectionException | StatementExecutionException e) {
         fail();
       }
@@ -108,7 +113,8 @@ public class SessionPoolTest {
       final int no = i;
       service.submit(() -> {
         try {
-          SessionDataSetWrapper wrapper = pool.executeQueryStatement("select * from root.sg1.d1 where time = " + no);
+          SessionDataSetWrapper wrapper = pool
+              .executeQueryStatement("select * from root.sg1.d1 where time = " + no);
           //this is incorrect becasue wrapper is not closed.
           //so all other 7 queries will be blocked
         } catch (IoTDBConnectionException | StatementExecutionException e) {
@@ -139,7 +145,9 @@ public class SessionPoolTest {
     ExecutorService service = Executors.newFixedThreadPool(10);
     for (int i = 0; i < 10; i++) {
       try {
-        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i), Collections.singletonList("" + i));
+        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i),
+            Collections.singletonList(TSDataType.INT64),
+            Collections.singletonList((long) i));
       } catch (IoTDBConnectionException | StatementExecutionException e) {
         fail();
       }
@@ -149,7 +157,8 @@ public class SessionPoolTest {
       final int no = i;
       service.submit(() -> {
         try {
-          SessionDataSetWrapper wrapper = pool.executeQueryStatement("select * from root.sg1.d1 where time = " + no);
+          SessionDataSetWrapper wrapper = pool
+              .executeQueryStatement("select * from root.sg1.d1 where time = " + no);
           pool.closeResultSet(wrapper);
           pool.closeResultSet(wrapper);
         } catch (Exception e) {
@@ -174,7 +183,9 @@ public class SessionPoolTest {
     SessionPool pool = new SessionPool("127.0.0.1", 6667, "root", "root", 3, 1, 6000, false);
     for (int i = 0; i < 10; i++) {
       try {
-        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i), Collections.singletonList("" + i));
+        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i),
+            Collections.singletonList(TSDataType.INT64),
+            Collections.singletonList((long) i));
       } catch (IoTDBConnectionException | StatementExecutionException e) {
         fail();
       }
@@ -184,10 +195,10 @@ public class SessionPoolTest {
       wrapper = pool.executeQueryStatement("select * from root.sg1.d1 where time > 1");
       EnvironmentUtils.stopDaemon();
       //user does not know what happens.
-      while(wrapper.hasNext()) {
+      while (wrapper.hasNext()) {
         wrapper.next();
       }
-    } catch (IoTDBConnectionException  e) {
+    } catch (IoTDBConnectionException e) {
       try {
         pool.closeResultSet(wrapper);
       } catch (StatementExecutionException ex) {
@@ -209,7 +220,9 @@ public class SessionPoolTest {
     SessionPool pool = new SessionPool("127.0.0.1", 6667, "root", "root", 3, 1, 60000, false);
     for (int i = 0; i < 10; i++) {
       try {
-        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i), Collections.singletonList("" + i));
+        pool.insert("root.sg1.d1", i, Collections.singletonList("s" + i),
+            Collections.singletonList(TSDataType.INT64),
+            Collections.singletonList((long) i));
       } catch (IoTDBConnectionException | StatementExecutionException e) {
         fail();
       }
@@ -221,7 +234,7 @@ public class SessionPoolTest {
       //user does not know what happens.
       assertEquals(0, pool.currentAvailableSize());
       assertEquals(1, pool.currentOccupiedSize());
-      while(wrapper.hasNext()) {
+      while (wrapper.hasNext()) {
         wrapper.next();
       }
       assertEquals(1, pool.currentAvailableSize());
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/Binary.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/Binary.java
index 58e1260..1903a09 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/Binary.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/Binary.java
@@ -24,13 +24,12 @@ import java.util.Arrays;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 
 /**
- * Override compareTo() and equals() function to Binary class. This class is
- * used to accept Java String type
+ * Override compareTo() and equals() function to Binary class. This class is used to accept Java
+ * String type
  */
 public class Binary implements Comparable<Binary>, Serializable {
 
   private static final long serialVersionUID = 6394197743397020735L;
-
   private byte[] values;
 
   /**
@@ -117,4 +116,8 @@ public class Binary implements Comparable<Binary>, Serializable {
   public byte[] getValues() {
     return values;
   }
+
+  public void setValues(byte[] values) {
+    this.values = values;
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
index 5003803..eef02eb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/ReadWriteIOUtils.java
@@ -19,11 +19,14 @@
 
 package org.apache.iotdb.tsfile.utils;
 
-import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
-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.reader.TsFileInput;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.BINARY;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.BOOLEAN;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.DOUBLE;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.FLOAT;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.INTEGER;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.LONG;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.NULL;
+import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.STRING;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -31,10 +34,17 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
-
-import static org.apache.iotdb.tsfile.utils.ReadWriteIOUtils.ClassSerializeId.*;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+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.reader.TsFileInput;
 
 /**
  * ConverterUtils is a utility class. It provide conversion between normal datatype and byte array.
@@ -206,6 +216,17 @@ public class ReadWriteIOUtils {
   }
 
   /**
+   * write a short n to byteBuffer.
+   *
+   * @return The number of bytes used to represent n.
+   */
+  public static int write(Binary n, ByteBuffer buffer) {
+    buffer.putInt(n.getLength());
+    buffer.put(n.getValues());
+    return INT_LEN + n.getLength();
+  }
+
+  /**
    * write a int n to outputStream.
    *
    * @return The number of bytes used to represent n.
@@ -280,6 +301,23 @@ public class ReadWriteIOUtils {
   }
 
   /**
+   * write a float n to byteBuffer.
+   */
+  public static int write(float n, ByteBuffer buffer) {
+    buffer.putFloat(n);
+    return FLOAT_LEN;
+  }
+
+  /**
+   * write a double n to byteBuffer.
+   */
+  public static int write(double n, ByteBuffer buffer) {
+    buffer.putDouble(n);
+    return DOUBLE_LEN;
+  }
+
+
+  /**
    * write string to outputStream.
    *
    * @return the length of string represented by byte[].