You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by jf...@apache.org on 2021/12/31 22:44:44 UTC

[iotdb] branch experimental/code-generation created (now a0739bd)

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

jfeinauer pushed a change to branch experimental/code-generation
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at a0739bd  Initial commit for code generation feature.

This branch includes the following new commits:

     new a0739bd  Initial commit for code generation feature.

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


[iotdb] 01/01: Initial commit for code generation feature.

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

jfeinauer pushed a commit to branch experimental/code-generation
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit a0739bde47808b9b70b8e1ea8c78e2baea4d1d9f
Author: julian <j....@pragmaticminds.de>
AuthorDate: Fri Dec 31 23:40:33 2021 +0100

    Initial commit for code generation feature.
---
 pom.xml                                            | 4220 +++++++++++++-------
 server/pom.xml                                     |    6 +
 tsfile/pom.xml                                     |   35 +
 .../tsfile/read/filter/codegen/DynamicFilter.java  |   52 +
 .../read/filter/codegen/GenerableFilter.java       |   12 +
 .../tsfile/read/filter/codegen/Generator.java      |   69 +
 .../tsfile/read/filter/operator/AndFilter.java     |   19 +-
 .../iotdb/tsfile/read/filter/operator/Eq.java      |   25 +-
 .../iotdb/tsfile/read/filter/operator/Gt.java      |   27 +-
 .../iotdb/tsfile/read/filter/operator/GtEq.java    |   27 +-
 .../iotdb/tsfile/read/filter/operator/Lt.java      |   26 +-
 .../iotdb/tsfile/read/filter/operator/LtEq.java    |   26 +-
 .../iotdb/tsfile/read/filter/operator/NotEq.java   |   25 +-
 .../tsfile/read/filter/operator/OrFilter.java      |   18 +-
 .../iotdb/tsfile/read/filter/operator/Regexp.java  |   20 +-
 .../read/reader/series/FileSeriesReader.java       |    5 +-
 .../tsfile/read/filter/operator/GeneratorTest.java |   87 +
 .../org/apache/iotdb/tsfile/write/PerformTest.java |   24 +
 .../tsfile/write/TsFilterPerformanceTest.java      |  410 ++
 19 files changed, 3717 insertions(+), 1416 deletions(-)

diff --git a/pom.xml b/pom.xml
index e07dc38..c82840e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!--
 
     Licensed to the Apache Software Foundation (ASF) under one
@@ -18,774 +18,1518 @@
     specific language governing permissions and limitations
     under the License.
 
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache</groupId>
-        <artifactId>apache</artifactId>
-        <version>23</version>
-    </parent>
-    <groupId>org.apache.iotdb</groupId>
-    <artifactId>iotdb-parent</artifactId>
-    <version>0.13.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-    <name>Apache IoTDB Project Parent POM</name>
-    <description>This is the top level project that builds, packages the tsfile, iotdb engine, jdbc, and integration libs.</description>
-    <licenses>
-        <license>
-            <name>The Apache License, Version 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-        </license>
-    </licenses>
-    <scm>
-        <connection>scm:git:ssh://git@github.com/apache/iotdb.git</connection>
-        <developerConnection>scm:git:ssh://git@github.com/apache/iotdb.git</developerConnection>
-        <url>ssh://git@github.com:apache/iotdb.git</url>
-        <tag>rel/0.10</tag>
-    </scm>
-    <!-- Only configure the site distribution as the rest is handled by the apache parent -->
-    <distributionManagement>
-        <site>
-            <id>apache.website</id>
-            <url>scm:git:https://gitbox.apache.org/repos/asf/iotdb-website.git</url>
-        </site>
-    </distributionManagement>
-    <issueManagement>
-        <system>Jira</system>
-        <url>https://issues.apache.org/jira/browse/iotdb</url>
-    </issueManagement>
-    <mailingLists>
-        <mailingList>
-            <name>Apache IoTDB Developer List</name>
-            <subscribe>mailto:dev-subscribe@iotdb.apache.org</subscribe>
-            <unsubscribe>mailto:dev-unsubscribe@iotdb.apache.org</unsubscribe>
-            <post>mailto:dev@iotdb.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/iotdb-dev/</archive>
-        </mailingList>
-        <mailingList>
-            <name>IoTDB Commits List</name>
-            <subscribe>mailto:commit-subscribe@iotdb.apache.org</subscribe>
-            <unsubscribe>mailto:commits-unsubscribe@iotdb.apache.org</unsubscribe>
-            <post>mailto:commits@iotdb.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/iotdb-commits/</archive>
-        </mailingList>
-        <mailingList>
-            <name>IoTDB Jira Notifications List</name>
-            <subscribe>mailto:notifications-subscribe@iotdb.apache.org</subscribe>
-            <unsubscribe>mailto:notifications-unsubscribe@iotdb.apache.org</unsubscribe>
-            <post>mailto:notifications@iotdb.apache.org</post>
-            <archive>http://mail-archives.apache.org/mod_mbox/iotdb-notifications/</archive>
-        </mailingList>
-    </mailingLists>
-    <modules>
-        <module>tsfile</module>
-        <module>antlr</module>
-        <module>thrift</module>
-        <module>thrift-cluster</module>
-        <module>thrift-sync</module>
-        <module>thrift-influxdb</module>
-        <module>service-rpc</module>
-        <module>jdbc</module>
-        <module>session</module>
-        <module>cli</module>
-        <module>openapi</module>
-        <module>server</module>
-        <module>example</module>
-        <module>grafana-plugin</module>
-        <module>grafana-connector</module>
-        <module>spark-tsfile</module>
-        <module>hadoop</module>
-        <module>spark-iotdb-connector</module>
-        <module>flink-tsfile-connector</module>
-        <module>flink-iotdb-connector</module>
-        <module>distribution</module>
-        <module>hive-connector</module>
-        <module>cluster</module>
-        <module>cross-tests</module>
-        <module>zeppelin-interpreter</module>
-        <module>client-py</module>
-        <module>compile-tools</module>
-        <module>client-cpp</module>
-        <module>metrics</module>
-        <module>integration</module>
-    </modules>
-    <!-- Properties Management -->
-    <properties>
-        <maven.compiler.source>1.8</maven.compiler.source>
-        <maven.compiler.target>1.8</maven.compiler.target>
-        <maven.assembly.version>3.1.0</maven.assembly.version>
-        <scala.library.version>2.11</scala.library.version>
-        <scala.version>2.11.12</scala.version>
-        <hadoop2.version>2.10.0</hadoop2.version>
-        <hive2.version>2.3.6</hive2.version>
-        <junit.version>4.13.2</junit.version>
-        <slf4j.version>1.7.12</slf4j.version>
-        <logback.version>1.2.10</logback.version>
-        <joda.version>2.9.9</joda.version>
-        <spark.version>2.4.3</spark.version>
-        <flink.version>1.14.0</flink.version>
-        <common.io.version>2.11.0</common.io.version>
-        <commons.collections4>4.4</commons.collections4>
-        <!-- keep consistent with client-cpp/tools/thrift/pom.xml-->
-        <thrift.version>0.14.1</thrift.version>
-        <airline.version>0.8</airline.version>
-        <jackson.version>2.10.5</jackson.version>
-        <antlr4.version>4.8-1</antlr4.version>
-        <common.cli.version>1.3.1</common.cli.version>
-        <common.codec.version>1.13</common.codec.version>
-        <common.collections.version>3.2.2</common.collections.version>
-        <common.lang3.version>3.8.1</common.lang3.version>
-        <common.logging.version>1.1.3</common.logging.version>
-        <common.pool2.version>2.11.1</common.pool2.version>
-        <org.slf4j.version>1.7.32</org.slf4j.version>
-        <guava.version>24.1.1</guava.version>
-        <jline.version>3.21.0</jline.version>
-        <jetty.version>9.4.35.v20201120</jetty.version>
-        <metrics.version>4.2.4</metrics.version>
-        <javax.xml.bind.version>2.4.0-b180830.0359</javax.xml.bind.version>
-        <felix.version>5.1.1</felix.version>
-        <snappy.version>1.1.8.4</snappy.version>
-        <netty.version>4.1.53.Final</netty.version>
-        <!-- URL of the ASF SonarQube server -->
-        <sonar.host.url>https://sonarcloud.io</sonar.host.url>
-        <sonar.organization>apache</sonar.organization>
-        <!-- Exclude all generated code -->
-        <sonar.exclusions>**/generated-sources</sonar.exclusions>
-        <sonar.java.checkstyle.reportPaths>target/checkstyle-report.xml</sonar.java.checkstyle.reportPaths>
-        <sonar.coverage.jacoco.xmlReportPaths>target/jacoco-merged-reports/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
-        <sonar.junit.reportPaths>target/surefire-reports,target/failsafe-reports</sonar.junit.reportPaths>
-        <!-- By default, the argLine is empty-->
-        <gson.version>2.8.8</gson.version>
-        <argLine/>
-        <!-- whether enable compiling the cpp client-->
-        <client-cpp>false</client-cpp>
-        <!-- disable enforcer by default-->
-        <enforcer.skip>true</enforcer.skip>
-        <spotless.version>2.4.2</spotless.version>
-        <httpclient.version>4.5.13</httpclient.version>
-        <httpcore.version>4.4.13</httpcore.version>
-        <!-- for REST service -->
-        <swagger.core.version>1.5.18</swagger.core.version>
-        <servlet.api.version>2.5</servlet.api.version>
-        <openapi.generator.version>5.0.0</openapi.generator.version>
-    </properties>
-    <!--
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+      
+  <modelVersion>4.0.0</modelVersion>
+      
+  <parent>
+            
+    <groupId>org.apache</groupId>
+            
+    <artifactId>apache</artifactId>
+            
+    <version>23</version>
+        
+  </parent>
+      
+  <groupId>org.apache.iotdb</groupId>
+      
+  <artifactId>iotdb-parent</artifactId>
+      
+  <version>0.13.0-SNAPSHOT</version>
+      
+  <packaging>pom</packaging>
+      
+  <name>Apache IoTDB Project Parent POM</name>
+      
+  <description>This is the top level project that builds, packages the tsfile, iotdb engine, jdbc, and integration libs.</description>
+      
+  <licenses>
+            
+    <license>
+                  
+      <name>The Apache License, Version 2.0</name>
+                  
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+              
+    </license>
+        
+  </licenses>
+      
+  <scm>
+            
+    <connection>scm:git:ssh://git@github.com/apache/iotdb.git</connection>
+            
+    <developerConnection>scm:git:ssh://git@github.com/apache/iotdb.git</developerConnection>
+            
+    <url>ssh://git@github.com:apache/iotdb.git</url>
+            
+    <tag>rel/0.10</tag>
+        
+  </scm>
+      
+  <!-- Only configure the site distribution as the rest is handled by the apache parent -->
+      
+  <distributionManagement>
+            
+    <site>
+                  
+      <id>apache.website</id>
+                  
+      <url>scm:git:https://gitbox.apache.org/repos/asf/iotdb-website.git</url>
+              
+    </site>
+        
+  </distributionManagement>
+      
+  <issueManagement>
+            
+    <system>Jira</system>
+            
+    <url>https://issues.apache.org/jira/browse/iotdb</url>
+        
+  </issueManagement>
+      
+  <mailingLists>
+            
+    <mailingList>
+                  
+      <name>Apache IoTDB Developer List</name>
+                  
+      <subscribe>mailto:dev-subscribe@iotdb.apache.org</subscribe>
+                  
+      <unsubscribe>mailto:dev-unsubscribe@iotdb.apache.org</unsubscribe>
+                  
+      <post>mailto:dev@iotdb.apache.org</post>
+                  
+      <archive>http://mail-archives.apache.org/mod_mbox/iotdb-dev/</archive>
+              
+    </mailingList>
+            
+    <mailingList>
+                  
+      <name>IoTDB Commits List</name>
+                  
+      <subscribe>mailto:commit-subscribe@iotdb.apache.org</subscribe>
+                  
+      <unsubscribe>mailto:commits-unsubscribe@iotdb.apache.org</unsubscribe>
+                  
+      <post>mailto:commits@iotdb.apache.org</post>
+                  
+      <archive>http://mail-archives.apache.org/mod_mbox/iotdb-commits/</archive>
+              
+    </mailingList>
+            
+    <mailingList>
+                  
+      <name>IoTDB Jira Notifications List</name>
+                  
+      <subscribe>mailto:notifications-subscribe@iotdb.apache.org</subscribe>
+                  
+      <unsubscribe>mailto:notifications-unsubscribe@iotdb.apache.org</unsubscribe>
+                  
+      <post>mailto:notifications@iotdb.apache.org</post>
+                  
+      <archive>http://mail-archives.apache.org/mod_mbox/iotdb-notifications/</archive>
+              
+    </mailingList>
+        
+  </mailingLists>
+      
+  <modules>
+            
+    <module>tsfile</module>
+            
+    <module>antlr</module>
+            
+    <module>thrift</module>
+            
+    <module>thrift-cluster</module>
+            
+    <module>thrift-sync</module>
+            
+    <module>thrift-influxdb</module>
+            
+    <module>service-rpc</module>
+            
+    <module>jdbc</module>
+            
+    <module>session</module>
+            
+    <module>cli</module>
+            
+    <module>openapi</module>
+            
+    <module>server</module>
+            
+    <module>example</module>
+            
+    <module>grafana-plugin</module>
+            
+    <module>grafana-connector</module>
+            
+    <module>spark-tsfile</module>
+            
+    <module>hadoop</module>
+            
+    <module>spark-iotdb-connector</module>
+            
+    <module>flink-tsfile-connector</module>
+            
+    <module>flink-iotdb-connector</module>
+            
+    <module>distribution</module>
+            
+    <module>hive-connector</module>
+            
+    <module>cluster</module>
+            
+    <module>cross-tests</module>
+            
+    <module>zeppelin-interpreter</module>
+            
+    <module>client-py</module>
+            
+    <module>compile-tools</module>
+            
+    <module>client-cpp</module>
+            
+    <module>metrics</module>
+            
+    <module>integration</module>
+          
+    <module>asdf</module>
+      
+  </modules>
+      
+  <!-- Properties Management -->
+      
+  <properties>
+            
+    <maven.compiler.source>1.8</maven.compiler.source>
+            
+    <maven.compiler.target>1.8</maven.compiler.target>
+            
+    <maven.assembly.version>3.1.0</maven.assembly.version>
+            
+    <scala.library.version>2.11</scala.library.version>
+            
+    <scala.version>2.11.12</scala.version>
+            
+    <hadoop2.version>2.10.0</hadoop2.version>
+            
+    <hive2.version>2.3.6</hive2.version>
+            
+    <junit.version>4.13.2</junit.version>
+            
+    <slf4j.version>1.7.12</slf4j.version>
+            
+    <logback.version>1.2.10</logback.version>
+            
+    <joda.version>2.9.9</joda.version>
+            
+    <spark.version>2.4.3</spark.version>
+            
+    <flink.version>1.14.0</flink.version>
+            
+    <common.io.version>2.11.0</common.io.version>
+            
+    <commons.collections4>4.4</commons.collections4>
+            
+    <!-- keep consistent with client-cpp/tools/thrift/pom.xml-->
+            
+    <thrift.version>0.14.1</thrift.version>
+            
+    <airline.version>0.8</airline.version>
+            
+    <jackson.version>2.10.5</jackson.version>
+            
+    <antlr4.version>4.8-1</antlr4.version>
+            
+    <common.cli.version>1.3.1</common.cli.version>
+            
+    <common.codec.version>1.13</common.codec.version>
+            
+    <common.collections.version>3.2.2</common.collections.version>
+            
+    <common.lang3.version>3.8.1</common.lang3.version>
+            
+    <common.logging.version>1.1.3</common.logging.version>
+            
+    <common.pool2.version>2.11.1</common.pool2.version>
+            
+    <org.slf4j.version>1.7.32</org.slf4j.version>
+            
+    <guava.version>24.1.1</guava.version>
+            
+    <jline.version>3.21.0</jline.version>
+            
+    <jetty.version>9.4.35.v20201120</jetty.version>
+            
+    <metrics.version>4.2.4</metrics.version>
+            
+    <javax.xml.bind.version>2.4.0-b180830.0359</javax.xml.bind.version>
+            
+    <felix.version>5.1.1</felix.version>
+            
+    <snappy.version>1.1.8.4</snappy.version>
+            
+    <netty.version>4.1.53.Final</netty.version>
+            
+    <!-- URL of the ASF SonarQube server -->
+            
+    <sonar.host.url>https://sonarcloud.io</sonar.host.url>
+            
+    <sonar.organization>apache</sonar.organization>
+            
+    <!-- Exclude all generated code -->
+            
+    <sonar.exclusions>**/generated-sources</sonar.exclusions>
+            
+    <sonar.java.checkstyle.reportPaths>target/checkstyle-report.xml</sonar.java.checkstyle.reportPaths>
+            
+    <sonar.coverage.jacoco.xmlReportPaths>target/jacoco-merged-reports/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
+            
+    <sonar.junit.reportPaths>target/surefire-reports,target/failsafe-reports</sonar.junit.reportPaths>
+            
+    <!-- By default, the argLine is empty-->
+            
+    <gson.version>2.8.8</gson.version>
+            
+    <argLine/>
+            
+    <!-- whether enable compiling the cpp client-->
+            
+    <client-cpp>false</client-cpp>
+            
+    <!-- disable enforcer by default-->
+            
+    <enforcer.skip>true</enforcer.skip>
+            
+    <spotless.version>2.4.2</spotless.version>
+            
+    <httpclient.version>4.5.13</httpclient.version>
+            
+    <httpcore.version>4.4.13</httpcore.version>
+            
+    <!-- for REST service -->
+            
+    <swagger.core.version>1.5.18</swagger.core.version>
+            
+    <servlet.api.version>2.5</servlet.api.version>
+            
+    <openapi.generator.version>5.0.0</openapi.generator.version>
+        
+  </properties>
+      
+  <!--
         if we claim dependencies in dependencyManagement, then we do not claim
         their version in sub-project's pom, but we have to claim themselves again
         in sub-projects
     -->
-    <dependencyManagement>
-        <dependencies>
-            <!--
+      
+  <dependencyManagement>
+            
+    <dependencies>
+                  
+      <!--
                 in the subprojects, you have to claim logback again, because maybe
                 someone in your dependences uses log4j lib.
             -->
-            <dependency>
-                <groupId>ch.qos.logback</groupId>
-                <artifactId>logback-classic</artifactId>
-                <version>${logback.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-annotations</artifactId>
-                <version>${jackson.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-core</artifactId>
-                <version>${jackson.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-databind</artifactId>
-                <version>${jackson.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.fasterxml.jackson.module</groupId>
-                <artifactId>jackson-module-paranamer</artifactId>
-                <version>${jackson.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.fasterxml.jackson.module</groupId>
-                <artifactId>jackson-module-scala_2.11</artifactId>
-                <version>${jackson.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.google.guava</groupId>
-                <artifactId>guava</artifactId>
-                <version>[${guava.version},)</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-cli</groupId>
-                <artifactId>commons-cli</artifactId>
-                <version>${common.cli.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-codec</groupId>
-                <artifactId>commons-codec</artifactId>
-                <version>${common.codec.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-collections</groupId>
-                <artifactId>commons-collections</artifactId>
-                <version>${common.collections.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>${common.io.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-logging</groupId>
-                <artifactId>commons-logging</artifactId>
-                <version>${common.logging.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty</artifactId>
-                <version>3.9.9.Final</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-all</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-buffer</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-common</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.annotation</groupId>
-                <artifactId>javax.annotation-api</artifactId>
-                <version>1.3.2</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.xml.bind</groupId>
-                <artifactId>jaxb-api</artifactId>
-                <version>${javax.xml.bind.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.jline</groupId>
-                <artifactId>jline</artifactId>
-                <version>${jline.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>${junit.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>log4j</groupId>
-                <artifactId>log4j</artifactId>
-                <version>1.2.17</version>
-            </dependency>
-            <dependency>
-                <groupId>org.lz4</groupId>
-                <artifactId>lz4-java</artifactId>
-                <version>1.8.0</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-server</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-webapp</artifactId>
-                <version>${jetty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.dropwizard.metrics</groupId>
-                <artifactId>metrics-core</artifactId>
-                <version>${metrics.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.dropwizard.metrics</groupId>
-                <artifactId>metrics-jvm</artifactId>
-                <version>${metrics.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.dropwizard.metrics</groupId>
-                <artifactId>metrics-json</artifactId>
-                <version>${metrics.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>me.tongfei</groupId>
-                <artifactId>progressbar</artifactId>
-                <version>0.9.2</version>
-                <exclusions>
-                    <!-- This transitive dependency duplicates classes from jline:jline:jar:2.14.5:compile -->
-                    <exclusion>
-                        <groupId>org.fusesource.jansi</groupId>
-                        <artifactId>jansi</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.antlr</groupId>
-                <artifactId>antlr4-runtime</artifactId>
-                <version>${antlr4.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-collections4</artifactId>
-                <version>${commons.collections4}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-lang3</artifactId>
-                <version>${common.lang3.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-pool2</artifactId>
-                <version>${common.pool2.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.hadoop</groupId>
-                <artifactId>hadoop-client</artifactId>
-                <version>${hadoop2.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.hive</groupId>
-                <artifactId>hive-serde</artifactId>
-                <version>${hive2.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.hive</groupId>
-                <artifactId>hive-exec</artifactId>
-                <version>${hive2.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.pentaho</groupId>
-                        <artifactId>pentaho-aggdesigner-algorithm</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.spark</groupId>
-                <artifactId>spark-core_2.11</artifactId>
-                <version>${spark.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.spark</groupId>
-                <artifactId>spark-sql_2.11</artifactId>
-                <version>${spark.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.codehaus.jackson</groupId>
-                <artifactId>jackson-core-asl</artifactId>
-                <version>1.9.13</version>
-            </dependency>
-            <dependency>
-                <groupId>org.codehaus.jackson</groupId>
-                <artifactId>jackson-mapper-asl</artifactId>
-                <version>1.9.13</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jaxb</groupId>
-                <artifactId>jaxb-runtime</artifactId>
-                <version>3.0.0</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>jakarta.activation</groupId>
-                        <artifactId>jakarta.activation-api</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.javassist</groupId>
-                <artifactId>javassist</artifactId>
-                <version>3.24.1-GA</version>
-            </dependency>
-            <dependency>
-                <groupId>org.mockito</groupId>
-                <artifactId>mockito-core</artifactId>
-                <version>2.23.0</version>
-            </dependency>
-            <dependency>
-                <groupId>org.objenesis</groupId>
-                <artifactId>objenesis</artifactId>
-                <version>3.0.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.powermock</groupId>
-                <artifactId>powermock-core</artifactId>
-                <version>2.0.2</version>
-            </dependency>
-            <dependency>
-                <groupId>org.powermock</groupId>
-                <artifactId>powermock-api-mockito2</artifactId>
-                <version>2.0.9</version>
-            </dependency>
-            <dependency>
-                <groupId>org.powermock</groupId>
-                <artifactId>powermock-module-junit4</artifactId>
-                <version>2.0.2</version>
-            </dependency>
-            <dependency>
-                <groupId>org.scala-lang</groupId>
-                <artifactId>scala-library</artifactId>
-                <version>${scala.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.scala-lang</groupId>
-                <artifactId>scala-reflect</artifactId>
-                <version>${scala.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.scalatest</groupId>
-                <artifactId>scalatest_2.11</artifactId>
-                <version>3.0.5</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>jcl-over-slf4j</artifactId>
-                <version>${org.slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>jul-to-slf4j</artifactId>
-                <version>${org.slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>${org.slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>${org.slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.xerial.snappy</groupId>
-                <artifactId>snappy-java</artifactId>
-                <version>${snappy.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.thrift</groupId>
-                <artifactId>libthrift</artifactId>
-                <version>${thrift.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.apache.httpcomponents</groupId>
-                        <artifactId>httpclient</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.apache.httpcomponents</groupId>
-                        <artifactId>httpcore</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.apache.tomcat.embed</groupId>
-                        <artifactId>tomcat-embed-core</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>io.airlift</groupId>
-                <artifactId>airline</artifactId>
-                <version>${airline.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.fusesource.mqtt-client</groupId>
-                <artifactId>mqtt-client</artifactId>
-                <version>1.12</version>
-            </dependency>
-            <!-- many dependencies (hadoop, spark, hive, flink) use findbugs but with different version...-->
-            <dependency>
-                <groupId>com.google.code.findbugs</groupId>
-                <artifactId>jsr305</artifactId>
-                <!-- spark uses the lastest version than hive, flink and hadoop-->
-                <version>3.0.2</version>
-            </dependency>
-            <dependency>
-                <groupId>com.google.code.gson</groupId>
-                <artifactId>gson</artifactId>
-                <version>${gson.version}</version>
-            </dependency>
-            <!-- for cli and test container -->
-            <dependency>
-                <groupId>net.java.dev.jna</groupId>
-                <artifactId>jna</artifactId>
-                <version>5.5.0</version>
-            </dependency>
-            <!-- for hadoop connector -->
-            <dependency>
-                <groupId>org.apache.zookeeper</groupId>
-                <artifactId>zookeeper</artifactId>
-                <version>3.4.9</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-beanutils</groupId>
-                <artifactId>commons-beanutils</artifactId>
-                <version>1.9.4</version>
-            </dependency>
-            <!-- for test-container and hadoop conflict-->
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-compress</artifactId>
-                <version>1.21</version>
-            </dependency>
-            <!-- for spark-iotdb-connector and hadoop connector conflict -->
-            <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>httpclient</artifactId>
-                <version>${httpclient.version}</version>
-            </dependency>
-            <!-- for spark-iotdb conflict -->
-            <dependency>
-                <groupId>com.google.errorprone</groupId>
-                <artifactId>error_prone_annotations</artifactId>
-                <version>2.7.1</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>httpcore</artifactId>
-                <version>${httpcore.version}</version>
-            </dependency>
-            <!-- for hive connector-->
-            <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-server</artifactId>
-                <version>11.0.6</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-    <dependencies>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.testcontainers</groupId>
-            <artifactId>testcontainers</artifactId>
-            <version>1.15.2</version>
-            <scope>test</scope>
-        </dependency>
+                  
+      <dependency>
+                        
+        <groupId>ch.qos.logback</groupId>
+                        
+        <artifactId>logback-classic</artifactId>
+                        
+        <version>${logback.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.fasterxml.jackson.core</groupId>
+                        
+        <artifactId>jackson-annotations</artifactId>
+                        
+        <version>${jackson.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.fasterxml.jackson.core</groupId>
+                        
+        <artifactId>jackson-core</artifactId>
+                        
+        <version>${jackson.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.fasterxml.jackson.core</groupId>
+                        
+        <artifactId>jackson-databind</artifactId>
+                        
+        <version>${jackson.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.fasterxml.jackson.module</groupId>
+                        
+        <artifactId>jackson-module-paranamer</artifactId>
+                        
+        <version>${jackson.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.fasterxml.jackson.module</groupId>
+                        
+        <artifactId>jackson-module-scala_2.11</artifactId>
+                        
+        <version>${jackson.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.google.guava</groupId>
+                        
+        <artifactId>guava</artifactId>
+                        
+        <version>[${guava.version},)</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-cli</groupId>
+                        
+        <artifactId>commons-cli</artifactId>
+                        
+        <version>${common.cli.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-codec</groupId>
+                        
+        <artifactId>commons-codec</artifactId>
+                        
+        <version>${common.codec.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-collections</groupId>
+                        
+        <artifactId>commons-collections</artifactId>
+                        
+        <version>${common.collections.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-io</groupId>
+                        
+        <artifactId>commons-io</artifactId>
+                        
+        <version>${common.io.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-logging</groupId>
+                        
+        <artifactId>commons-logging</artifactId>
+                        
+        <version>${common.logging.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.netty</groupId>
+                        
+        <artifactId>netty</artifactId>
+                        
+        <version>3.9.9.Final</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.netty</groupId>
+                        
+        <artifactId>netty-all</artifactId>
+                        
+        <version>${netty.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.netty</groupId>
+                        
+        <artifactId>netty-buffer</artifactId>
+                        
+        <version>${netty.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.netty</groupId>
+                        
+        <artifactId>netty-common</artifactId>
+                        
+        <version>${netty.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>javax.annotation</groupId>
+                        
+        <artifactId>javax.annotation-api</artifactId>
+                        
+        <version>1.3.2</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>javax.xml.bind</groupId>
+                        
+        <artifactId>jaxb-api</artifactId>
+                        
+        <version>${javax.xml.bind.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.jline</groupId>
+                        
+        <artifactId>jline</artifactId>
+                        
+        <version>${jline.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>junit</groupId>
+                        
+        <artifactId>junit</artifactId>
+                        
+        <version>${junit.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>log4j</groupId>
+                        
+        <artifactId>log4j</artifactId>
+                        
+        <version>1.2.17</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.lz4</groupId>
+                        
+        <artifactId>lz4-java</artifactId>
+                        
+        <version>1.8.0</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.eclipse.jetty</groupId>
+                        
+        <artifactId>jetty-server</artifactId>
+                        
+        <version>${jetty.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.eclipse.jetty</groupId>
+                        
+        <artifactId>jetty-webapp</artifactId>
+                        
+        <version>${jetty.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.dropwizard.metrics</groupId>
+                        
+        <artifactId>metrics-core</artifactId>
+                        
+        <version>${metrics.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.dropwizard.metrics</groupId>
+                        
+        <artifactId>metrics-jvm</artifactId>
+                        
+        <version>${metrics.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.dropwizard.metrics</groupId>
+                        
+        <artifactId>metrics-json</artifactId>
+                        
+        <version>${metrics.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>me.tongfei</groupId>
+                        
+        <artifactId>progressbar</artifactId>
+                        
+        <version>0.9.2</version>
+                        
+        <exclusions>
+                              
+          <!-- This transitive dependency duplicates classes from jline:jline:jar:2.14.5:compile -->
+                              
+          <exclusion>
+                                    
+            <groupId>org.fusesource.jansi</groupId>
+                                    
+            <artifactId>jansi</artifactId>
+                                
+          </exclusion>
+                          
+        </exclusions>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.antlr</groupId>
+                        
+        <artifactId>antlr4-runtime</artifactId>
+                        
+        <version>${antlr4.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.commons</groupId>
+                        
+        <artifactId>commons-collections4</artifactId>
+                        
+        <version>${commons.collections4}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.commons</groupId>
+                        
+        <artifactId>commons-lang3</artifactId>
+                        
+        <version>${common.lang3.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.commons</groupId>
+                        
+        <artifactId>commons-pool2</artifactId>
+                        
+        <version>${common.pool2.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.hadoop</groupId>
+                        
+        <artifactId>hadoop-client</artifactId>
+                        
+        <version>${hadoop2.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.hive</groupId>
+                        
+        <artifactId>hive-serde</artifactId>
+                        
+        <version>${hive2.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.hive</groupId>
+                        
+        <artifactId>hive-exec</artifactId>
+                        
+        <version>${hive2.version}</version>
+                        
+        <exclusions>
+                              
+          <exclusion>
+                                    
+            <groupId>org.pentaho</groupId>
+                                    
+            <artifactId>pentaho-aggdesigner-algorithm</artifactId>
+                                
+          </exclusion>
+                          
+        </exclusions>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.spark</groupId>
+                        
+        <artifactId>spark-core_2.11</artifactId>
+                        
+        <version>${spark.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.spark</groupId>
+                        
+        <artifactId>spark-sql_2.11</artifactId>
+                        
+        <version>${spark.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.codehaus.jackson</groupId>
+                        
+        <artifactId>jackson-core-asl</artifactId>
+                        
+        <version>1.9.13</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.codehaus.jackson</groupId>
+                        
+        <artifactId>jackson-mapper-asl</artifactId>
+                        
+        <version>1.9.13</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.glassfish.jaxb</groupId>
+                        
+        <artifactId>jaxb-runtime</artifactId>
+                        
+        <version>3.0.0</version>
+                        
+        <exclusions>
+                              
+          <exclusion>
+                                    
+            <groupId>jakarta.activation</groupId>
+                                    
+            <artifactId>jakarta.activation-api</artifactId>
+                                
+          </exclusion>
+                          
+        </exclusions>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.javassist</groupId>
+                        
+        <artifactId>javassist</artifactId>
+                        
+        <version>3.24.1-GA</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.mockito</groupId>
+                        
+        <artifactId>mockito-core</artifactId>
+                        
+        <version>2.23.0</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.objenesis</groupId>
+                        
+        <artifactId>objenesis</artifactId>
+                        
+        <version>3.0.1</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.powermock</groupId>
+                        
+        <artifactId>powermock-core</artifactId>
+                        
+        <version>2.0.2</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.powermock</groupId>
+                        
+        <artifactId>powermock-api-mockito2</artifactId>
+                        
+        <version>2.0.9</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.powermock</groupId>
+                        
+        <artifactId>powermock-module-junit4</artifactId>
+                        
+        <version>2.0.2</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.scala-lang</groupId>
+                        
+        <artifactId>scala-library</artifactId>
+                        
+        <version>${scala.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.scala-lang</groupId>
+                        
+        <artifactId>scala-reflect</artifactId>
+                        
+        <version>${scala.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.scalatest</groupId>
+                        
+        <artifactId>scalatest_2.11</artifactId>
+                        
+        <version>3.0.5</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.slf4j</groupId>
+                        
+        <artifactId>jcl-over-slf4j</artifactId>
+                        
+        <version>${org.slf4j.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.slf4j</groupId>
+                        
+        <artifactId>jul-to-slf4j</artifactId>
+                        
+        <version>${org.slf4j.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.slf4j</groupId>
+                        
+        <artifactId>slf4j-api</artifactId>
+                        
+        <version>${org.slf4j.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.slf4j</groupId>
+                        
+        <artifactId>slf4j-log4j12</artifactId>
+                        
+        <version>${org.slf4j.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.xerial.snappy</groupId>
+                        
+        <artifactId>snappy-java</artifactId>
+                        
+        <version>${snappy.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.thrift</groupId>
+                        
+        <artifactId>libthrift</artifactId>
+                        
+        <version>${thrift.version}</version>
+                        
+        <exclusions>
+                              
+          <exclusion>
+                                    
+            <groupId>org.apache.httpcomponents</groupId>
+                                    
+            <artifactId>httpclient</artifactId>
+                                
+          </exclusion>
+                              
+          <exclusion>
+                                    
+            <groupId>org.apache.httpcomponents</groupId>
+                                    
+            <artifactId>httpcore</artifactId>
+                                
+          </exclusion>
+                              
+          <exclusion>
+                                    
+            <groupId>org.apache.tomcat.embed</groupId>
+                                    
+            <artifactId>tomcat-embed-core</artifactId>
+                                
+          </exclusion>
+                          
+        </exclusions>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>io.airlift</groupId>
+                        
+        <artifactId>airline</artifactId>
+                        
+        <version>${airline.version}</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.fusesource.mqtt-client</groupId>
+                        
+        <artifactId>mqtt-client</artifactId>
+                        
+        <version>1.12</version>
+                    
+      </dependency>
+                  
+      <!-- many dependencies (hadoop, spark, hive, flink) use findbugs but with different version...-->
+                  
+      <dependency>
+                        
+        <groupId>com.google.code.findbugs</groupId>
+                        
+        <artifactId>jsr305</artifactId>
+                        
+        <!-- spark uses the lastest version than hive, flink and hadoop-->
+                        
+        <version>3.0.2</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>com.google.code.gson</groupId>
+                        
+        <artifactId>gson</artifactId>
+                        
+        <version>${gson.version}</version>
+                    
+      </dependency>
+                  
+      <!-- for cli and test container -->
+                  
+      <dependency>
+                        
+        <groupId>net.java.dev.jna</groupId>
+                        
+        <artifactId>jna</artifactId>
+                        
+        <version>5.5.0</version>
+                    
+      </dependency>
+                  
+      <!-- for hadoop connector -->
+                  
+      <dependency>
+                        
+        <groupId>org.apache.zookeeper</groupId>
+                        
+        <artifactId>zookeeper</artifactId>
+                        
+        <version>3.4.9</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>commons-beanutils</groupId>
+                        
+        <artifactId>commons-beanutils</artifactId>
+                        
+        <version>1.9.4</version>
+                    
+      </dependency>
+                  
+      <!-- for test-container and hadoop conflict-->
+                  
+      <dependency>
+                        
+        <groupId>org.apache.commons</groupId>
+                        
+        <artifactId>commons-compress</artifactId>
+                        
+        <version>1.21</version>
+                    
+      </dependency>
+                  
+      <!-- for spark-iotdb-connector and hadoop connector conflict -->
+                  
+      <dependency>
+                        
+        <groupId>org.apache.httpcomponents</groupId>
+                        
+        <artifactId>httpclient</artifactId>
+                        
+        <version>${httpclient.version}</version>
+                    
+      </dependency>
+                  
+      <!-- for spark-iotdb conflict -->
+                  
+      <dependency>
+                        
+        <groupId>com.google.errorprone</groupId>
+                        
+        <artifactId>error_prone_annotations</artifactId>
+                        
+        <version>2.7.1</version>
+                    
+      </dependency>
+                  
+      <dependency>
+                        
+        <groupId>org.apache.httpcomponents</groupId>
+                        
+        <artifactId>httpcore</artifactId>
+                        
+        <version>${httpcore.version}</version>
+                    
+      </dependency>
+                  
+      <!-- for hive connector-->
+                  
+      <dependency>
+                        
+        <groupId>org.eclipse.jetty</groupId>
+                        
+        <artifactId>jetty-server</artifactId>
+                        
+        <version>11.0.6</version>
+                    
+      </dependency>
+              
     </dependencies>
-    <build>
-        <pluginManagement>
-            <plugins>
-                <!-- using `mvn -N versions:update-child-modules` can update the version
+        
+  </dependencyManagement>
+      
+  <dependencies>
+            
+    <dependency>
+                  
+      <groupId>ch.qos.logback</groupId>
+                  
+      <artifactId>logback-classic</artifactId>
+              
+    </dependency>
+            
+    <dependency>
+                  
+      <groupId>org.slf4j</groupId>
+                  
+      <artifactId>slf4j-api</artifactId>
+              
+    </dependency>
+            
+    <dependency>
+                  
+      <groupId>junit</groupId>
+                  
+      <artifactId>junit</artifactId>
+                  
+      <scope>test</scope>
+              
+    </dependency>
+            
+    <dependency>
+                  
+      <groupId>org.testcontainers</groupId>
+                  
+      <artifactId>testcontainers</artifactId>
+                  
+      <version>1.15.2</version>
+                  
+      <scope>test</scope>
+              
+    </dependency>
+        
+  </dependencies>
+      
+  <build>
+            
+    <pluginManagement>
+                  
+      <plugins>
+                        
+        <!-- using `mvn -N versions:update-child-modules` can update the version
                 of child modules to what their parent claims -->
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>versions-maven-plugin</artifactId>
-                    <version>2.3</version>
-                    <configuration>
-                        <generateBackupPoms>false</generateBackupPoms>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <configuration>
-                        <excludePackageNames>*thrift*</excludePackageNames>
-                        <!--
+                        
+        <plugin>
+                              
+          <groupId>org.codehaus.mojo</groupId>
+                              
+          <artifactId>versions-maven-plugin</artifactId>
+                              
+          <version>2.3</version>
+                              
+          <configuration>
+                                    
+            <generateBackupPoms>false</generateBackupPoms>
+                                
+          </configuration>
+                          
+        </plugin>
+                        
+        <plugin>
+                              
+          <groupId>org.apache.maven.plugins</groupId>
+                              
+          <artifactId>maven-javadoc-plugin</artifactId>
+                              
+          <configuration>
+                                    
+            <excludePackageNames>*thrift*</excludePackageNames>
+                                    
+            <!--
                           This will suppress the generation of a hidden timestamp at the top of each generated html page
                           and hopefully let the site generation nod to too big updates every time.
                         -->
-                        <notimestamp>true</notimestamp>
-                        <!--Don't fail the build, just because there were issues in the JavaDoc generation.-->
-                        <failOnError>false</failOnError>
-                    </configuration>
-                </plugin>
-                <!--
+                                    
+            <notimestamp>true</notimestamp>
+                                    
+            <!--Don't fail the build, just because there were issues in the JavaDoc generation.-->
+                                    
+            <failOnError>false</failOnError>
+                                
+          </configuration>
+                          
+        </plugin>
+                        
+        <!--
                   We need to increase the memory available to tests as we were
                   getting out-of-memory errors when building on windows machines.
                 -->
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <argLine>${argLine} -Xmx1024m</argLine>
-                    </configuration>
-                </plugin>
-                <!--
+                        
+        <plugin>
+                              
+          <groupId>org.apache.maven.plugins</groupId>
+                              
+          <artifactId>maven-surefire-plugin</artifactId>
+                              
+          <configuration>
+                                    
+            <argLine>${argLine} -Xmx1024m</argLine>
+                                
+          </configuration>
+                          
+        </plugin>
+                        
+        <!--
                     Plugin for doing the code analysis.
                 -->
-                <plugin>
-                    <groupId>org.sonarsource.scanner.maven</groupId>
-                    <artifactId>sonar-maven-plugin</artifactId>
-                    <version>3.6.1.1688</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.rat</groupId>
-                    <artifactId>apache-rat-plugin</artifactId>
-                    <configuration>
-                        <consoleOutput>true</consoleOutput>
-                        <excludes>
-                            <!-- Git related files -->
-                            <exclude>**/.git/**</exclude>
-                            <exclude>**/.mvn/**</exclude>
-                            <exclude>**/.gitignore</exclude>
-                            <exclude>**/.gitmodules</exclude>
-                            <exclude>**/.git-blame-ignore-revs</exclude>
-                            <!-- Maven related files -->
-                            <exclude>**/target/**</exclude>
-                            <!-- Eclipse related files -->
-                            <exclude>**/.project</exclude>
-                            <exclude>**/.settings/**</exclude>
-                            <exclude>**/.classpath</exclude>
-                            <!-- IntelliJ related files -->
-                            <exclude>**/.idea/**</exclude>
-                            <exclude>**/*.iml</exclude>
-                            <!-- Runtime log -->
-                            <exclude>**/*.log</exclude>
-                            <!-- Exclude CVS files -->
-                            <exclude>**/*.cvs</exclude>
-                            <!-- licenses -->
-                            <exclude>licenses/*</exclude>
-                            <!-- only for Travis CI with WinOS-->
-                            <exclude>hadoopbin</exclude>
-                            <exclude>windowssystem32</exclude>
-                            <!-- generated by Github -->
-                            <exclude>**/.github/**</exclude>
-                            <!-- figures -->
-                            <exclude>**/.eps</exclude>
-                            <exclude>**/.png</exclude>
-                            <exclude>**/.jpg</exclude>
-                            <exclude>**/.jpeg</exclude>
-                            <!--Generated by Apache Release -->
-                            <exclude>local-snapshots-dir/**</exclude>
-                            <!-- JSON can't contain comments and therefore no Apache header -->
-                            <exclude>*.json</exclude>
-                            <!-- visualization plans -->
-                            <exclude>**/*.plan</exclude>
-                            <exclude>**/NOTICE-binary</exclude>
-                            <exclude>**/LICENSE-binary</exclude>
-                            <!-- json does not support comments-->
-                            <exclude>**/*.json</exclude>
-                            <!-- the zeppelin export file format-->
-                            <exclude>**/*.zpln</exclude>
-                            <!-- exclude go.mod and go.sum in iotdb-client-go submodule-->
-                            <exclude>**/go.mod</exclude>
-                            <exclude>**/go.sum</exclude>
-                            <!-- python -->
-                            <exclude>.pytest_cache/**</exclude>
-                            <exclude>venv/**</exclude>
-                            <exclude>apache_iotdb.egg-info/**</exclude>
-                            <!-- Java SPI uses files in resources/META-INF/services-->
-                            <exclude>**/resources/META-INF/services/**</exclude>
-                        </excludes>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>com.diffplug.spotless</groupId>
-                    <artifactId>spotless-maven-plugin</artifactId>
-                    <version>${spotless.version}</version>
-                    <configuration>
-                        <java>
-                            <googleJavaFormat>
-                                <version>1.7</version>
-                                <style>GOOGLE</style>
-                            </googleJavaFormat>
-                            <importOrder>
-                                <order>org.apache.iotdb,,javax,java,\#</order>
-                            </importOrder>
-                            <removeUnusedImports/>
-                        </java>
-                        <lineEndings>UNIX</lineEndings>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <id>spotless-check</id>
-                            <phase>validate</phase>
-                            <goals>
-                                <goal>check</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-        <plugins>
-            <plugin>
-                <groupId>org.eluder.coveralls</groupId>
-                <artifactId>coveralls-maven-plugin</artifactId>
-                <version>4.3.0</version>
-                <configuration>
-                    <jacocoReports>
-                        <jacocoReport>code-coverage/target/jacoco-merged-reports/jacoco.xml</jacocoReport>
-                    </jacocoReports>
-                    <sourceEncoding>UTF-8</sourceEncoding>
-                    <sourceDirectories>
-                        <!-- put all source folders not in src/main/java here-->
-                        <sourceDirectory>antlr/target/generated-sources/antlr4</sourceDirectory>
-                        <sourceDirectory>thrift/target/generated-sources/thrift</sourceDirectory>
-                        <sourceDirectory>thrift-sync/target/generated-sources/thrift</sourceDirectory>
-                        <sourceDirectory>thrift-cluster/target/generated-sources/thrift</sourceDirectory>
-                        <sourceDirectory>openapi/target/generated-sources/java/src/gen/java</sourceDirectory>
-                        <sourceDirectory>openapi/target/generated-sources/java/src/main/java</sourceDirectory>
-                        <sourceDirectory>spark-iotdb-connector/src/main/scala</sourceDirectory>
-                        <sourceDirectory>spark-tsfile/src/main/scala</sourceDirectory>
-                    </sourceDirectories>
-                </configuration>
-                <!-- JDK11 removes the following libs. We have to add them-->
-                <dependencies>
-                    <dependency>
-                        <groupId>javax.xml.bind</groupId>
-                        <artifactId>jaxb-api</artifactId>
-                        <version>2.4.0-b180830.0359</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>com.sun.xml.bind</groupId>
-                        <artifactId>jaxb-core</artifactId>
-                        <version>2.3.0</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>com.sun.xml.bind</groupId>
-                        <artifactId>jaxb-impl</artifactId>
-                        <version>2.3.0</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <!--
+                        
+        <plugin>
+                              
+          <groupId>org.sonarsource.scanner.maven</groupId>
+                              
+          <artifactId>sonar-maven-plugin</artifactId>
+                              
+          <version>3.6.1.1688</version>
+                          
+        </plugin>
+                        
+        <plugin>
+                              
+          <groupId>org.apache.rat</groupId>
+                              
+          <artifactId>apache-rat-plugin</artifactId>
+                              
+          <configuration>
+                                    
+            <consoleOutput>true</consoleOutput>
+                                    
+            <excludes>
+                                          
+              <!-- Git related files -->
+                                          
+              <exclude>**/.git/**</exclude>
+                                          
+              <exclude>**/.mvn/**</exclude>
+                                          
+              <exclude>**/.gitignore</exclude>
+                                          
+              <exclude>**/.gitmodules</exclude>
+                                          
+              <exclude>**/.git-blame-ignore-revs</exclude>
+                                          
+              <!-- Maven related files -->
+                                          
+              <exclude>**/target/**</exclude>
+                                          
+              <!-- Eclipse related files -->
+                                          
+              <exclude>**/.project</exclude>
+                                          
+              <exclude>**/.settings/**</exclude>
+                                          
+              <exclude>**/.classpath</exclude>
+                                          
+              <!-- IntelliJ related files -->
+                                          
+              <exclude>**/.idea/**</exclude>
+                                          
+              <exclude>**/*.iml</exclude>
+                                          
+              <!-- Runtime log -->
+                                          
+              <exclude>**/*.log</exclude>
+                                          
+              <!-- Exclude CVS files -->
+                                          
+              <exclude>**/*.cvs</exclude>
+                                          
+              <!-- licenses -->
+                                          
+              <exclude>licenses/*</exclude>
+                                          
+              <!-- only for Travis CI with WinOS-->
+                                          
+              <exclude>hadoopbin</exclude>
+                                          
+              <exclude>windowssystem32</exclude>
+                                          
+              <!-- generated by Github -->
+                                          
+              <exclude>**/.github/**</exclude>
+                                          
+              <!-- figures -->
+                                          
+              <exclude>**/.eps</exclude>
+                                          
+              <exclude>**/.png</exclude>
+                                          
+              <exclude>**/.jpg</exclude>
+                                          
+              <exclude>**/.jpeg</exclude>
+                                          
+              <!--Generated by Apache Release -->
+                                          
+              <exclude>local-snapshots-dir/**</exclude>
+                                          
+              <!-- JSON can't contain comments and therefore no Apache header -->
+                                          
+              <exclude>*.json</exclude>
+                                          
+              <!-- visualization plans -->
+                                          
+              <exclude>**/*.plan</exclude>
+                                          
+              <exclude>**/NOTICE-binary</exclude>
+                                          
+              <exclude>**/LICENSE-binary</exclude>
+                                          
+              <!-- json does not support comments-->
+                                          
+              <exclude>**/*.json</exclude>
+                                          
+              <!-- the zeppelin export file format-->
+                                          
+              <exclude>**/*.zpln</exclude>
+                                          
+              <!-- exclude go.mod and go.sum in iotdb-client-go submodule-->
+                                          
+              <exclude>**/go.mod</exclude>
+                                          
+              <exclude>**/go.sum</exclude>
+                                          
+              <!-- python -->
+                                          
+              <exclude>.pytest_cache/**</exclude>
+                                          
+              <exclude>venv/**</exclude>
+                                          
+              <exclude>apache_iotdb.egg-info/**</exclude>
+                                          
+              <!-- Java SPI uses files in resources/META-INF/services-->
+                                          
+              <exclude>**/resources/META-INF/services/**</exclude>
+                                      
+            </excludes>
+                                
+          </configuration>
+                          
+        </plugin>
+                        
+        <plugin>
+                              
+          <groupId>com.diffplug.spotless</groupId>
+                              
+          <artifactId>spotless-maven-plugin</artifactId>
+                              
+          <version>${spotless.version}</version>
+                              
+          <configuration>
+                                    
+            <java>
+                                          
+              <googleJavaFormat>
+                                                
+                <version>1.7</version>
+                                                
+                <style>GOOGLE</style>
+                                            
+              </googleJavaFormat>
+                                          
+              <importOrder>
+                                                
+                <order>org.apache.iotdb,,javax,java,\#</order>
+                                            
+              </importOrder>
+                                          
+              <removeUnusedImports/>
+                                      
+            </java>
+                                    
+            <lineEndings>UNIX</lineEndings>
+                                
+          </configuration>
+                              
+          <executions>
+                                    
+            <execution>
+                                          
+              <id>spotless-check</id>
+                                          
+              <phase>validate</phase>
+                                          
+              <goals>
+                                                
+                <goal>check</goal>
+                                            
+              </goals>
+                                      
+            </execution>
+                                
+          </executions>
+                          
+        </plugin>
+                    
+      </plugins>
+              
+    </pluginManagement>
+            
+    <plugins>
+                  
+      <plugin>
+                        
+        <groupId>org.eluder.coveralls</groupId>
+                        
+        <artifactId>coveralls-maven-plugin</artifactId>
+                        
+        <version>4.3.0</version>
+                        
+        <configuration>
+                              
+          <jacocoReports>
+                                    
+            <jacocoReport>code-coverage/target/jacoco-merged-reports/jacoco.xml</jacocoReport>
+                                
+          </jacocoReports>
+                              
+          <sourceEncoding>UTF-8</sourceEncoding>
+                              
+          <sourceDirectories>
+                                    
+            <!-- put all source folders not in src/main/java here-->
+                                    
+            <sourceDirectory>antlr/target/generated-sources/antlr4</sourceDirectory>
+                                    
+            <sourceDirectory>thrift/target/generated-sources/thrift</sourceDirectory>
+                                    
+            <sourceDirectory>thrift-sync/target/generated-sources/thrift</sourceDirectory>
+                                    
+            <sourceDirectory>thrift-cluster/target/generated-sources/thrift</sourceDirectory>
+                                    
+            <sourceDirectory>openapi/target/generated-sources/java/src/gen/java</sourceDirectory>
+                                    
+            <sourceDirectory>openapi/target/generated-sources/java/src/main/java</sourceDirectory>
+                                    
+            <sourceDirectory>spark-iotdb-connector/src/main/scala</sourceDirectory>
+                                    
+            <sourceDirectory>spark-tsfile/src/main/scala</sourceDirectory>
+                                
+          </sourceDirectories>
+                          
+        </configuration>
+                        
+        <!-- JDK11 removes the following libs. We have to add them-->
+                        
+        <dependencies>
+                              
+          <dependency>
+                                    
+            <groupId>javax.xml.bind</groupId>
+                                    
+            <artifactId>jaxb-api</artifactId>
+                                    
+            <version>2.4.0-b180830.0359</version>
+                                
+          </dependency>
+                              
+          <dependency>
+                                    
+            <groupId>com.sun.xml.bind</groupId>
+                                    
+            <artifactId>jaxb-core</artifactId>
+                                    
+            <version>2.3.0</version>
+                                
+          </dependency>
+                              
+          <dependency>
+                                    
+            <groupId>com.sun.xml.bind</groupId>
+                                    
+            <artifactId>jaxb-impl</artifactId>
+                                    
+            <version>2.3.0</version>
+                                
+          </dependency>
+                          
+        </dependencies>
+                    
+      </plugin>
+                  
+      <!--
                       Strange things usually happen if you run with a too low Java version.
                       This plugin not only checks the minimum java version of 1.8, but also
                       checks all dependencies (and transitive dependencies) for reported CVEs.
                     -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-enforcer-plugin</artifactId>
-                <version>3.0.0-M2</version>
-                <!--$NO-MVN-MAN-VER$-->
-                <executions>
-                    <!-- Ensure we're not mixing dependency versions -->
-                    <execution>
-                        <id>enforce-version-convergence</id>
-                        <phase>validate</phase>
-                        <configuration>
-                            <rules>
-                                <dependencyConvergence/>
-                            </rules>
-                        </configuration>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                    </execution>
-                    <!--
+                  
+      <plugin>
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-enforcer-plugin</artifactId>
+                        
+        <version>3.0.0-M2</version>
+                        
+        <!--$NO-MVN-MAN-VER$-->
+                        
+        <executions>
+                              
+          <!-- Ensure we're not mixing dependency versions -->
+                              
+          <execution>
+                                    
+            <id>enforce-version-convergence</id>
+                                    
+            <phase>validate</phase>
+                                    
+            <configuration>
+                                          
+              <rules>
+                                                
+                <dependencyConvergence/>
+                                            
+              </rules>
+                                      
+            </configuration>
+                                    
+            <goals>
+                                          
+              <goal>enforce</goal>
+                                      
+            </goals>
+                                
+          </execution>
+                              
+          <!--
                         Fails the build if classes are included from multiple
                         artifacts and these are not identical.
                     -->
-                    <!--execution>
+                              
+          <!--execution>
                         <id>enforce-ban-duplicate-classes</id>
                         <goals>
                             <goal>enforce</goal>
@@ -804,41 +1548,76 @@
                             <fail>true</fail>
                         </configuration>
                     </execution-->
-                    <!-- Make sure no dependencies are used for which known vulnerabilities exist. -->
-                    <execution>
-                        <id>vulnerability-checks</id>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <!-- Just generate warnings for now -->
-                            <fail>false</fail>
-                            <rules>
-                                <requireJavaVersion>
-                                    <version>1.8.0</version>
-                                </requireJavaVersion>
-                                <!-- Disabled for now as it breaks the ability to build single modules -->
-                                <!--reactorModuleConvergence/-->
-                                <banVulnerable implementation="org.sonatype.ossindex.maven.enforcer.BanVulnerableDependencies"/>
-                            </rules>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.sonatype.ossindex.maven</groupId>
-                        <artifactId>ossindex-maven-enforcer-rules</artifactId>
-                        <version>1.0.0</version>
-                    </dependency>
-                    <dependency>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>extra-enforcer-rules</artifactId>
-                        <version>1.4</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-            <!--
+                              
+          <!-- Make sure no dependencies are used for which known vulnerabilities exist. -->
+                              
+          <execution>
+                                    
+            <id>vulnerability-checks</id>
+                                    
+            <phase>validate</phase>
+                                    
+            <goals>
+                                          
+              <goal>enforce</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <!-- Just generate warnings for now -->
+                                          
+              <fail>false</fail>
+                                          
+              <rules>
+                                                
+                <requireJavaVersion>
+                                                      
+                  <version>1.8.0</version>
+                                                  
+                </requireJavaVersion>
+                                                
+                <!-- Disabled for now as it breaks the ability to build single modules -->
+                                                
+                <!--reactorModuleConvergence/-->
+                                                
+                <banVulnerable implementation="org.sonatype.ossindex.maven.enforcer.BanVulnerableDependencies"/>
+                                            
+              </rules>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                        
+        <dependencies>
+                              
+          <dependency>
+                                    
+            <groupId>org.sonatype.ossindex.maven</groupId>
+                                    
+            <artifactId>ossindex-maven-enforcer-rules</artifactId>
+                                    
+            <version>1.0.0</version>
+                                
+          </dependency>
+                              
+          <dependency>
+                                    
+            <groupId>org.codehaus.mojo</groupId>
+                                    
+            <artifactId>extra-enforcer-rules</artifactId>
+                                    
+            <version>1.4</version>
+                                
+          </dependency>
+                          
+        </dependencies>
+                    
+      </plugin>
+                  
+      <!--
               Even if Maven transitively pulls in dependencies, relying on these can
               quite often cause hard to find problems. So it's a good practice to make
               sure everything directly required is also directly added as a dependency.
@@ -847,311 +1626,607 @@
               what we need and only that and that runtime dependencies are correctly
               imported with runtime scope.
             -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>check-dependencies</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>analyze-only</goal>
-                        </goals>
-                        <configuration>
-                            <failOnWarning>false</failOnWarning>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>net.revelc.code.formatter</groupId>
-                <artifactId>formatter-maven-plugin</artifactId>
-                <version>2.8.1</version>
-            </plugin>
-            <!--for code style check -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <version>3.0.0</version>
-                <dependencies>
-                    <dependency>
-                        <groupId>com.puppycrawl.tools</groupId>
-                        <artifactId>checkstyle</artifactId>
-                        <version>8.18</version>
-                    </dependency>
-                </dependencies>
-                <executions>
-                    <execution>
-                        <id>validate</id>
-                        <phase>validate</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                        <configuration>
-                            <outputFile>target/checkstyle-report.xml</outputFile>
-                            <configLocation>checkstyle.xml</configLocation>
-                        </configuration>
-                    </execution>
-                </executions>
-                <configuration>
-                    <configLocation>checkstyle.xml</configLocation>
-                </configuration>
-            </plugin>
-            <!--
+                  
+      <plugin>
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-dependency-plugin</artifactId>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>check-dependencies</id>
+                                    
+            <phase>verify</phase>
+                                    
+            <goals>
+                                          
+              <goal>analyze-only</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <failOnWarning>false</failOnWarning>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+                  
+      <plugin>
+                        
+        <groupId>net.revelc.code.formatter</groupId>
+                        
+        <artifactId>formatter-maven-plugin</artifactId>
+                        
+        <version>2.8.1</version>
+                    
+      </plugin>
+                  
+      <!--for code style check -->
+                  
+      <plugin>
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-checkstyle-plugin</artifactId>
+                        
+        <version>3.0.0</version>
+                        
+        <dependencies>
+                              
+          <dependency>
+                                    
+            <groupId>com.puppycrawl.tools</groupId>
+                                    
+            <artifactId>checkstyle</artifactId>
+                                    
+            <version>8.18</version>
+                                
+          </dependency>
+                          
+        </dependencies>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>validate</id>
+                                    
+            <phase>validate</phase>
+                                    
+            <goals>
+                                          
+              <goal>check</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <outputFile>target/checkstyle-report.xml</outputFile>
+                                          
+              <configLocation>checkstyle.xml</configLocation>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                        
+        <configuration>
+                              
+          <configLocation>checkstyle.xml</configLocation>
+                          
+        </configuration>
+                    
+      </plugin>
+                  
+      <!--
               Check if all files contain Apache headers in them.
               Ignore this plugin, we use license-maven-plugin to check apache header.
             -->
-            <plugin>
-                <groupId>org.apache.rat</groupId>
-                <artifactId>apache-rat-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>license-check</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>au.com.acegi</groupId>
-                <artifactId>xml-format-maven-plugin</artifactId>
-                <version>3.0.7</version>
-                <executions>
-                    <execution>
-                        <id>xml-format</id>
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>xml-format</goal>
-                        </goals>
-                        <configuration>
-                            <!-- configure your formatting preferences here (see link below) -->
-                            <indentSize>4</indentSize>
-                            <excludes>**/target/**</excludes>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <!--
+                  
+      <plugin>
+                        
+        <groupId>org.apache.rat</groupId>
+                        
+        <artifactId>apache-rat-plugin</artifactId>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>license-check</id>
+                                    
+            <phase>verify</phase>
+                                    
+            <goals>
+                                          
+              <goal>check</goal>
+                                      
+            </goals>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+                  
+      <plugin>
+                        
+        <groupId>au.com.acegi</groupId>
+                        
+        <artifactId>xml-format-maven-plugin</artifactId>
+                        
+        <version>3.0.7</version>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>xml-format</id>
+                                    
+            <phase>compile</phase>
+                                    
+            <goals>
+                                          
+              <goal>xml-format</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <!-- configure your formatting preferences here (see link below) -->
+                                          
+              <indentSize>4</indentSize>
+                                          
+              <excludes>**/target/**</excludes>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+                  
+      <!--
               Generate the legally required text files in the jars
             -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>process-resource-bundles</id>
-                        <goals>
-                            <goal>process</goal>
-                        </goals>
-                        <configuration>
-                            <resourceBundles>
-                                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
-                                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-                            </resourceBundles>
-                            <!-- Content in this directory will be appended to generated resources -->
-                            <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <!-- Separates the unit tests from the integration tests. -->
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unit-tests</id>
-                        <phase>test</phase>
-                        <goals>
-                            <goal>test</goal>
-                        </goals>
-                        <configuration>
-                            <includes>
-                                <!-- Include unit tests within integration-test phase. -->
-                                <include>src/test/**/*Test.java</include>
-                            </includes>
-                            <excludes>
-                                <!-- Exclude integration tests within (unit) test phase. -->
-                                <exclude>src/test/**/*IT.java</exclude>
-                            </excludes>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>integration-tests</id>
-                        <phase>integration-test</phase>
-                        <goals>
-                            <goal>test</goal>
-                        </goals>
-                        <configuration>
-                            <includes>
-                                <!-- Include integration tests within integration-test phase. -->
-                                <include>src/test/**/*IT.java</include>
-                            </includes>
-                            <excludes>
-                                <!-- Exclude unit tests within (unit) test phase. -->
-                                <exclude>src/test/**/*Test.java</exclude>
-                            </excludes>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <!-- Also package the sources as jar -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-source-plugin</artifactId>
-                <version>3.2.0</version>
-                <executions>
-                    <execution>
-                        <id>create-source-package</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
+                  
+      <plugin>
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-remote-resources-plugin</artifactId>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>process-resource-bundles</id>
+                                    
+            <goals>
+                                          
+              <goal>process</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <resourceBundles>
+                                                
+                <!-- Will generate META-INF/{DEPENDENCIES,LICENSE,NOTICE} -->
+                                                
+                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
+                                            
+              </resourceBundles>
+                                          
+              <!-- Content in this directory will be appended to generated resources -->
+                                          
+              <appendedResourcesDirectory>${basedir}/src/remote-resources</appendedResourcesDirectory>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+                  
+      <plugin>
+                        
+        <!-- Separates the unit tests from the integration tests. -->
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-surefire-plugin</artifactId>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>unit-tests</id>
+                                    
+            <phase>test</phase>
+                                    
+            <goals>
+                                          
+              <goal>test</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <includes>
+                                                
+                <!-- Include unit tests within integration-test phase. -->
+                                                
+                <include>src/test/**/*Test.java</include>
+                                            
+              </includes>
+                                          
+              <excludes>
+                                                
+                <!-- Exclude integration tests within (unit) test phase. -->
+                                                
+                <exclude>src/test/**/*IT.java</exclude>
+                                            
+              </excludes>
+                                      
+            </configuration>
+                                
+          </execution>
+                              
+          <execution>
+                                    
+            <id>integration-tests</id>
+                                    
+            <phase>integration-test</phase>
+                                    
+            <goals>
+                                          
+              <goal>test</goal>
+                                      
+            </goals>
+                                    
+            <configuration>
+                                          
+              <includes>
+                                                
+                <!-- Include integration tests within integration-test phase. -->
+                                                
+                <include>src/test/**/*IT.java</include>
+                                            
+              </includes>
+                                          
+              <excludes>
+                                                
+                <!-- Exclude unit tests within (unit) test phase. -->
+                                                
+                <exclude>src/test/**/*Test.java</exclude>
+                                            
+              </excludes>
+                                      
+            </configuration>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+                  
+      <!-- Also package the sources as jar -->
+                  
+      <plugin>
+                        
+        <groupId>org.apache.maven.plugins</groupId>
+                        
+        <artifactId>maven-source-plugin</artifactId>
+                        
+        <version>3.2.0</version>
+                        
+        <executions>
+                              
+          <execution>
+                                    
+            <id>create-source-package</id>
+                                    
+            <phase>package</phase>
+                                    
+            <goals>
+                                          
+              <goal>jar</goal>
+                                      
+            </goals>
+                                
+          </execution>
+                          
+        </executions>
+                    
+      </plugin>
+              
+    </plugins>
+        
+  </build>
+      
+  <profiles>
+            
+    <!-- spotless is too slow, so we put it into a profile to skip it if needed -->
+            
+    <!-- currently spotless cannot run on jdk16, due to JEP 396: Strongly Encapsulate JDK Internals by Default-->
+            
+    <profile>
+                  
+      <id>spotless</id>
+                  
+      <activation>
+                        
+        <!-- activeByDefault does not take effect-->
+                        
+        <jdk>[1.8,16)</jdk>
+                        
+        <file>
+                              
+          <exists>.</exists>
+                          
+        </file>
+                    
+      </activation>
+                  
+      <build>
+                        
+        <plugins>
+                              
+          <plugin>
+                                    
+            <groupId>com.diffplug.spotless</groupId>
+                                    
+            <artifactId>spotless-maven-plugin</artifactId>
+                                
+          </plugin>
+                          
         </plugins>
-    </build>
-    <profiles>
-        <!-- spotless is too slow, so we put it into a profile to skip it if needed -->
-        <!-- currently spotless cannot run on jdk16, due to JEP 396: Strongly Encapsulate JDK Internals by Default-->
-        <profile>
-            <id>spotless</id>
-            <activation>
-                <!-- activeByDefault does not take effect-->
-                <jdk>[1.8,16)</jdk>
-                <file>
-                    <exists>.</exists>
-                </file>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>com.diffplug.spotless</groupId>
-                        <artifactId>spotless-maven-plugin</artifactId>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <!--
+                    
+      </build>
+              
+    </profile>
+            
+    <!--
           A set of profiles defining the different properties needed to download and run thrift
           They are automatically activated depending on the OS you are using.
         -->
-        <profile>
-            <id>windows</id>
-            <activation>
-                <os>
-                    <family>windows</family>
-                </os>
-            </activation>
-            <properties>
-                <os.classifier>windows-x86_64</os.classifier>
-                <thrift.download-url>http://artfiles.org/apache.org/thrift/${thrift.version}/thrift-${thrift.version}.exe</thrift.download-url>
-                <thrift.executable>thrift-${thrift.version}-win-x86_64.exe</thrift.executable>
-                <thrift.skip-making-executable>true</thrift.skip-making-executable>
-                <thrift.exec-cmd.executable>echo</thrift.exec-cmd.executable>
-                <thrift.exec-cmd.args>"Do nothing"</thrift.exec-cmd.args>
-            </properties>
-        </profile>
-        <!-- Has to be listed before "mac" as it seems a mac is both "mac" and "unix" -->
-        <profile>
-            <id>unix</id>
-            <activation>
-                <os>
-                    <family>unix</family>
-                </os>
-            </activation>
-            <properties>
-                <os.classifier>linux-x86_64</os.classifier>
-                <thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-ubuntu</thrift.download-url>
-                <thrift.executable>thrift_0.14.1_linux.exe</thrift.executable>
-                <thrift.skip-making-executable>false</thrift.skip-making-executable>
-                <thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
-                <thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
-            </properties>
-        </profile>
-        <profile>
-            <id>mac</id>
-            <activation>
-                <os>
-                    <family>mac</family>
-                </os>
-            </activation>
-            <properties>
-                <os.classifier>mac-x86_64</os.classifier>
-                <thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-MacOS</thrift.download-url>
-                <thrift.executable>thrift_0.14.1_mac.exe</thrift.executable>
-                <thrift.skip-making-executable>false</thrift.skip-making-executable>
-                <thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
-                <thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
-            </properties>
-        </profile>
-        <!-- for TestContainer. As it requires docker, we have to detect whether docker exists.-->
-        <profile>
-            <!-- Mac and Unix-->
-            <id>unixDockerCheck</id>
-            <activation>
-                <file>
-                    <exists>/var/run/docker.sock</exists>
-                </file>
-            </activation>
-            <modules>
-                <module>testcontainer</module>
-            </modules>
-        </profile>
-        <profile>
-            <id>WinDockerCheck</id>
-            <activation>
-                <file>
-                    <exists>C:\Program Files\Docker\Docker\resources\bin\docker.exe</exists>
-                </file>
-            </activation>
-            <modules>
-                <module>testcontainer</module>
-            </modules>
-        </profile>
-        <!-- Some APIs were removed in Java 11, so we need to add replacements -->
-        <profile>
-            <id>java-11-and-above</id>
-            <activation>
-                <!-- This needs to be updated as soon as Java 20 is shipped -->
-                <jdk>[11,20)</jdk>
-            </activation>
-            <properties>
-                <maven.compiler.release>8</maven.compiler.release>
-            </properties>
-            <dependencies>
-                <!-- for jdk-11 -->
-                <dependency>
-                    <groupId>javax.annotation</groupId>
-                    <artifactId>javax.annotation-api</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>javax.xml.bind</groupId>
-                    <artifactId>jaxb-api</artifactId>
-                </dependency>
-                <dependency>
-                    <groupId>org.glassfish.jaxb</groupId>
-                    <artifactId>jaxb-runtime</artifactId>
-                </dependency>
-            </dependencies>
-        </profile>
-        <!-- Add argLine for Java 16 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default]
+            
+    <profile>
+                  
+      <id>windows</id>
+                  
+      <activation>
+                        
+        <os>
+                              
+          <family>windows</family>
+                          
+        </os>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <os.classifier>windows-x86_64</os.classifier>
+                        
+        <thrift.download-url>http://artfiles.org/apache.org/thrift/${thrift.version}/thrift-${thrift.version}.exe</thrift.download-url>
+                        
+        <thrift.executable>thrift-${thrift.version}-win-x86_64.exe</thrift.executable>
+                        
+        <thrift.skip-making-executable>true</thrift.skip-making-executable>
+                        
+        <thrift.exec-cmd.executable>echo</thrift.exec-cmd.executable>
+                        
+        <thrift.exec-cmd.args>"Do nothing"</thrift.exec-cmd.args>
+                    
+      </properties>
+              
+    </profile>
+            
+    <!-- Has to be listed before "mac" as it seems a mac is both "mac" and "unix" -->
+            
+    <profile>
+                  
+      <id>unix</id>
+                  
+      <activation>
+                        
+        <os>
+                              
+          <family>unix</family>
+                          
+        </os>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <os.classifier>linux-x86_64</os.classifier>
+                        
+        <thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-ubuntu</thrift.download-url>
+                        
+        <thrift.executable>thrift_0.14.1_linux.exe</thrift.executable>
+                        
+        <thrift.skip-making-executable>false</thrift.skip-making-executable>
+                        
+        <thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
+                        
+        <thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
+                    
+      </properties>
+              
+    </profile>
+            
+    <profile>
+                  
+      <id>mac</id>
+                  
+      <activation>
+                        
+        <os>
+                              
+          <family>mac</family>
+                          
+        </os>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <os.classifier>mac-x86_64</os.classifier>
+                        
+        <thrift.download-url>https://github.com/apache/iotdb-bin-resources/raw/main/compile-tools/thrift-0.14-MacOS</thrift.download-url>
+                        
+        <thrift.executable>thrift_0.14.1_mac.exe</thrift.executable>
+                        
+        <thrift.skip-making-executable>false</thrift.skip-making-executable>
+                        
+        <thrift.exec-cmd.executable>chmod</thrift.exec-cmd.executable>
+                        
+        <thrift.exec-cmd.args>+x ${project.build.directory}/tools/${thrift.executable}</thrift.exec-cmd.args>
+                    
+      </properties>
+              
+    </profile>
+            
+    <!-- for TestContainer. As it requires docker, we have to detect whether docker exists.-->
+            
+    <profile>
+                  
+      <!-- Mac and Unix-->
+                  
+      <id>unixDockerCheck</id>
+                  
+      <activation>
+                        
+        <file>
+                              
+          <exists>/var/run/docker.sock</exists>
+                          
+        </file>
+                    
+      </activation>
+                  
+      <modules>
+                        
+        <module>testcontainer</module>
+                    
+      </modules>
+              
+    </profile>
+            
+    <profile>
+                  
+      <id>WinDockerCheck</id>
+                  
+      <activation>
+                        
+        <file>
+                              
+          <exists>C:\Program Files\Docker\Docker\resources\bin\docker.exe</exists>
+                          
+        </file>
+                    
+      </activation>
+                  
+      <modules>
+                        
+        <module>testcontainer</module>
+                    
+      </modules>
+              
+    </profile>
+            
+    <!-- Some APIs were removed in Java 11, so we need to add replacements -->
+            
+    <profile>
+                  
+      <id>java-11-and-above</id>
+                  
+      <activation>
+                        
+        <!-- This needs to be updated as soon as Java 20 is shipped -->
+                        
+        <jdk>[11,20)</jdk>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <maven.compiler.release>8</maven.compiler.release>
+                    
+      </properties>
+                  
+      <dependencies>
+                        
+        <!-- for jdk-11 -->
+                        
+        <dependency>
+                              
+          <groupId>javax.annotation</groupId>
+                              
+          <artifactId>javax.annotation-api</artifactId>
+                          
+        </dependency>
+                        
+        <dependency>
+                              
+          <groupId>javax.xml.bind</groupId>
+                              
+          <artifactId>jaxb-api</artifactId>
+                          
+        </dependency>
+                        
+        <dependency>
+                              
+          <groupId>org.glassfish.jaxb</groupId>
+                              
+          <artifactId>jaxb-runtime</artifactId>
+                          
+        </dependency>
+                    
+      </dependencies>
+              
+    </profile>
+            
+    <!-- Add argLine for Java 16 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default]
           (https://openjdk.java.net/jeps/396) -->
-        <profile>
-            <id>java-16-and-above</id>
-            <activation>
-                <!-- This needs to be updated as soon as Java 20 is shipped -->
-                <jdk>[16,20)</jdk>
-            </activation>
-            <properties>
-                <maven.compiler.release>8</maven.compiler.release>
-                <argLine>--illegal-access=permit --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.java [...]
-            </properties>
-        </profile>
-        <!--
+            
+    <profile>
+                  
+      <id>java-16-and-above</id>
+                  
+      <activation>
+                        
+        <!-- This needs to be updated as soon as Java 20 is shipped -->
+                        
+        <jdk>[16,20)</jdk>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <maven.compiler.release>8</maven.compiler.release>
+                        
+        <argLine>--illegal-access=permit --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.file=A [...]
+                    
+      </properties>
+              
+    </profile>
+            
+    <!--
           Self activating profile, that activates itself as soon as a "src/main/thrift" directory is found.
           The different plugins here download the thrift executable matching the current os, make that
           executable (on mac and unix/linux) and run the code generation.
@@ -1160,344 +2235,677 @@
           and only downloads each file once. It caches downloaded files in:
           {maven local repo}/.cache/download-maven-plugin
         -->
-        <profile>
-            <id>thrift-generation</id>
-            <activation>
-                <file>
-                    <exists>src/main/thrift</exists>
-                </file>
-            </activation>
-            <properties>
-                <thrift.exec.absolute.path>${project.build.directory}/tools/${thrift.executable}</thrift.exec.absolute.path>
-            </properties>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>com.googlecode.maven-download-plugin</groupId>
-                        <artifactId>download-maven-plugin</artifactId>
-                        <version>1.6.7</version>
-                        <executions>
-                            <execution>
-                                <id>get-thrift-executable</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>wget</goal>
-                                </goals>
-                                <configuration>
-                                    <url>${thrift.download-url}</url>
-                                    <outputDirectory>${project.build.directory}/tools</outputDirectory>
-                                    <outputFileName>${thrift.executable}</outputFileName>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>exec-maven-plugin</artifactId>
-                        <version>1.6.0</version>
-                        <executions>
-                            <execution>
-                                <id>make-thrift-executable-executable</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>exec</goal>
-                                </goals>
-                                <configuration>
-                                    <skip>${thrift.skip-making-executable}</skip>
-                                    <executable>${thrift.exec-cmd.executable}</executable>
-                                    <commandlineArgs>${thrift.exec-cmd.args}</commandlineArgs>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <plugin>
-                        <groupId>org.apache.thrift.tools</groupId>
-                        <artifactId>maven-thrift-plugin</artifactId>
-                        <version>0.1.11</version>
-                        <executions>
-                            <execution>
-                                <id>generate-thrift-sources-java</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>compile</goal>
-                                </goals>
-                                <configuration>
-                                    <generator>java</generator>
-                                    <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
-                                    <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>generate-thrift-sources-python</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>compile</goal>
-                                </goals>
-                                <configuration>
-                                    <generator>py</generator>
-                                    <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
-                                    <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
-                                    <outputDirectory>${project.build.directory}/generated-sources-python/</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>generate-thrift-sources-go</id>
-                                <phase>generate-sources</phase>
-                                <goals>
-                                    <goal>compile</goal>
-                                </goals>
-                                <configuration>
-                                    <generator>go</generator>
-                                    <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
-                                    <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
-                                    <outputDirectory>${project.build.directory}/generated-sources-go</outputDirectory>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <!-- Make sure the source assembly has the right name -->
-        <profile>
-            <id>apache-release</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <version>${maven.assembly.version}</version>
-                        <executions>
-                            <execution>
-                                <id>source-release-assembly</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <!-- heads up: combine.self in the following is highlighted
+            
+    <profile>
+                  
+      <id>thrift-generation</id>
+                  
+      <activation>
+                        
+        <file>
+                              
+          <exists>src/main/thrift</exists>
+                          
+        </file>
+                    
+      </activation>
+                  
+      <properties>
+                        
+        <thrift.exec.absolute.path>${project.build.directory}/tools/${thrift.executable}</thrift.exec.absolute.path>
+                    
+      </properties>
+                  
+      <build>
+                        
+        <plugins>
+                              
+          <plugin>
+                                    
+            <groupId>com.googlecode.maven-download-plugin</groupId>
+                                    
+            <artifactId>download-maven-plugin</artifactId>
+                                    
+            <version>1.6.7</version>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <id>get-thrift-executable</id>
+                                                
+                <phase>generate-sources</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>wget</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <url>${thrift.download-url}</url>
+                                                      
+                  <outputDirectory>${project.build.directory}/tools</outputDirectory>
+                                                      
+                  <outputFileName>${thrift.executable}</outputFileName>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                              
+          <plugin>
+                                    
+            <groupId>org.codehaus.mojo</groupId>
+                                    
+            <artifactId>exec-maven-plugin</artifactId>
+                                    
+            <version>1.6.0</version>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <id>make-thrift-executable-executable</id>
+                                                
+                <phase>generate-sources</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>exec</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <skip>${thrift.skip-making-executable}</skip>
+                                                      
+                  <executable>${thrift.exec-cmd.executable}</executable>
+                                                      
+                  <commandlineArgs>${thrift.exec-cmd.args}</commandlineArgs>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                              
+          <plugin>
+                                    
+            <groupId>org.apache.thrift.tools</groupId>
+                                    
+            <artifactId>maven-thrift-plugin</artifactId>
+                                    
+            <version>0.1.11</version>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <id>generate-thrift-sources-java</id>
+                                                
+                <phase>generate-sources</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>compile</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <generator>java</generator>
+                                                      
+                  <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
+                                                      
+                  <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <execution>
+                                                
+                <id>generate-thrift-sources-python</id>
+                                                
+                <phase>generate-sources</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>compile</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <generator>py</generator>
+                                                      
+                  <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
+                                                      
+                  <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
+                                                      
+                  <outputDirectory>${project.build.directory}/generated-sources-python/</outputDirectory>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <execution>
+                                                
+                <id>generate-thrift-sources-go</id>
+                                                
+                <phase>generate-sources</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>compile</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <generator>go</generator>
+                                                      
+                  <thriftExecutable>${thrift.exec.absolute.path}</thriftExecutable>
+                                                      
+                  <thriftSourceRoot>${basedir}/src/main/thrift</thriftSourceRoot>
+                                                      
+                  <outputDirectory>${project.build.directory}/generated-sources-go</outputDirectory>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                          
+        </plugins>
+                    
+      </build>
+              
+    </profile>
+            
+    <!-- Make sure the source assembly has the right name -->
+            
+    <profile>
+                  
+      <id>apache-release</id>
+                  
+      <build>
+                        
+        <plugins>
+                              
+          <plugin>
+                                    
+            <groupId>org.apache.maven.plugins</groupId>
+                                    
+            <artifactId>maven-assembly-plugin</artifactId>
+                                    
+            <version>${maven.assembly.version}</version>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <id>source-release-assembly</id>
+                                                
+                <phase>package</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>single</goal>
+                                                  
+                </goals>
+                                                
+                <!-- heads up: combine.self in the following is highlighted
                                     as an error in Eclipse's xml editor view.
                                     Just ignore that.
                                     See  https://issues.apache.org/jira/browse/MNG-5454  sigh.
                                  -->
-                                <configuration combine.self="append">
-                                    <finalName>apache-iotdb-${project.version}</finalName>
-                                    <archive>
-                                        <manifest>
-                                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-                                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-                                        </manifest>
-                                    </archive>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <!--
+                                                
+                <configuration combine.self="append">
+                                                      
+                  <finalName>apache-iotdb-${project.version}</finalName>
+                                                      
+                  <archive>
+                                                            
+                    <manifest>
+                                                                  
+                      <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                                                                  
+                      <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                                                              
+                    </manifest>
+                                                        
+                  </archive>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                              
+          <!--
                       Create SHA512 checksum files for the release artifacts.
                     -->
-                    <plugin>
-                        <groupId>net.nicoulaj.maven.plugins</groupId>
-                        <artifactId>checksum-maven-plugin</artifactId>
-                        <version>1.8</version>
-                        <executions>
-                            <execution>
-                                <id>sign-source-release</id>
-                                <phase>package</phase>
-                                <goals>
-                                    <goal>files</goal>
-                                </goals>
-                                <configuration>
-                                    <algorithms>
-                                        <algorithm>SHA-512</algorithm>
-                                    </algorithms>
-                                    <fileSets>
-                                        <fileSet>
-                                            <directory>${project.build.directory}</directory>
-                                            <includes>
-                                                <include>apache-iotdb-${project.version}-source-release.zip</include>
-                                            </includes>
-                                        </fileSet>
-                                    </fileSets>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <!-- enable site-->
-        <!-- use `mvn package -P site -pl site` to compile the site module only -->
-        <profile>
-            <id>site</id>
-            <modules>
-                <module>site</module>
-            </modules>
-        </profile>
-        <!-- code coverage for ut and it, and then merge them together.-->
-        <profile>
-            <id>code-coverage</id>
-            <modules>
-                <module>code-coverage</module>
-            </modules>
-            <build>
-                <plugins>
-                    <!-- Jacoco is a code coverage analysis plugin when tests run.
+                              
+          <plugin>
+                                    
+            <groupId>net.nicoulaj.maven.plugins</groupId>
+                                    
+            <artifactId>checksum-maven-plugin</artifactId>
+                                    
+            <version>1.8</version>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <id>sign-source-release</id>
+                                                
+                <phase>package</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>files</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <algorithms>
+                                                            
+                    <algorithm>SHA-512</algorithm>
+                                                        
+                  </algorithms>
+                                                      
+                  <fileSets>
+                                                            
+                    <fileSet>
+                                                                  
+                      <directory>${project.build.directory}</directory>
+                                                                  
+                      <includes>
+                                                                        
+                        <include>apache-iotdb-${project.version}-source-release.zip</include>
+                                                                    
+                      </includes>
+                                                              
+                    </fileSet>
+                                                        
+                  </fileSets>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                          
+        </plugins>
+                    
+      </build>
+              
+    </profile>
+            
+    <!-- enable site-->
+            
+    <!-- use `mvn package -P site -pl site` to compile the site module only -->
+            
+    <profile>
+                  
+      <id>site</id>
+                  
+      <modules>
+                        
+        <module>site</module>
+                    
+      </modules>
+              
+    </profile>
+            
+    <!-- code coverage for ut and it, and then merge them together.-->
+            
+    <profile>
+                  
+      <id>code-coverage</id>
+                  
+      <modules>
+                        
+        <module>code-coverage</module>
+                    
+      </modules>
+                  
+      <build>
+                        
+        <plugins>
+                              
+          <!-- Jacoco is a code coverage analysis plugin when tests run.
                     (not a static code analysis tool)-->
-                    <plugin>
-                        <groupId>org.jacoco</groupId>
-                        <artifactId>jacoco-maven-plugin</artifactId>
-                        <version>0.8.5</version>
-                        <configuration>
-                            <excludes>
-                                <exclude>org/apache/iotdb/service/sync/thrift/*</exclude>
-                                <exclude>org/apache/iotdb/service/rpc/thrift/*</exclude>
-                                <exclude>org/apache/iotdb/cluster/rpc/thrift/*</exclude>
-                                <exclude>org/apache/iotdb/protocol/influxdb/rpc/thrift/*</exclude>
-                                <exclude>org/apache/iotdb/db/qp/sql/*</exclude>
-                            </excludes>
-                            <rules>
-                                <rule implementation="org.jacoco.maven.RuleConfiguration">
-                                    <element>BUNDLE</element>
-                                    <limits>  
-                                        <!-- Cover methodes >=30%. (the plugin does not support
+                              
+          <plugin>
+                                    
+            <groupId>org.jacoco</groupId>
+                                    
+            <artifactId>jacoco-maven-plugin</artifactId>
+                                    
+            <version>0.8.5</version>
+                                    
+            <configuration>
+                                          
+              <excludes>
+                                                
+                <exclude>org/apache/iotdb/service/sync/thrift/*</exclude>
+                                                
+                <exclude>org/apache/iotdb/service/rpc/thrift/*</exclude>
+                                                
+                <exclude>org/apache/iotdb/cluster/rpc/thrift/*</exclude>
+                                                
+                <exclude>org/apache/iotdb/protocol/influxdb/rpc/thrift/*</exclude>
+                                                
+                <exclude>org/apache/iotdb/db/qp/sql/*</exclude>
+                                            
+              </excludes>
+                                          
+              <rules>
+                                                
+                <rule implementation="org.jacoco.maven.RuleConfiguration">
+                                                      
+                  <element>BUNDLE</element>
+                                                      
+                  <limits>
+                      
+                                        
+                    <!-- Cover methodes >=30%. (the plugin does not support
                                         ignore getter and setter and toString etc..) -->
-                                        <limit implementation="org.jacoco.report.check.Limit">
-                                            <counter>METHOD</counter>
-                                            <value>COVEREDRATIO</value>
-                                            <minimum>0.00</minimum>
-                                        </limit>
-                                        <!-- if-else, swtich etc.. >=70% -->
-                                        <limit implementation="org.jacoco.report.check.Limit">
-                                            <counter>BRANCH</counter>
-                                            <value>COVEREDRATIO</value>
-                                            <minimum>0.00</minimum>
-                                        </limit>
-                                        <!-- class files >=95% -->
-                                        <limit implementation="org.jacoco.report.check.Limit">
-                                            <counter>CLASS</counter>
-                                            <value>COVEREDRATIO</value>
-                                            <minimum>0.00</minimum>
-                                        </limit>
-                                    </limits>
-                                </rule>
-                            </rules>
-                        </configuration>
-                        <executions>
-                            <!-- see https://natritmeyer.com/howto/reporting-aggregated-unit-and-integration-test-coverage-with-jacoco/-->
-                            <!-- For UT-->
-                            <execution>
-                                <id>prepare-ut</id>
-                                <goals>
-                                    <goal>prepare-agent</goal>
-                                </goals>
-                                <configuration>
-                                    <destFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</destFile>
-                                    <propertyName>surefire.jacoco.args</propertyName>
-                                </configuration>
-                            </execution>
-                            <!-- attached to Maven test phase -->
-                            <execution>
-                                <id>ut-report</id>
-                                <phase>test</phase>
-                                <goals>
-                                    <goal>report</goal>
-                                    <goal>check</goal>
-                                </goals>
-                                <configuration>
-                                    <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</dataFile>
-                                    <outputDirectory>${project.build.directory}/jacoco-unit-reports</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <!-- For IT-->
-                            <execution>
-                                <id>before-integration-test-execution</id>
-                                <phase>pre-integration-test</phase>
-                                <goals>
-                                    <goal>prepare-agent</goal>
-                                </goals>
-                                <configuration>
-                                    <destFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</destFile>
-                                    <propertyName>failsafe.jacoco.args</propertyName>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>after-integration-test-execution</id>
-                                <phase>integration-test</phase>
-                                <goals>
-                                    <goal>report</goal>
-                                    <goal>check</goal>
-                                </goals>
-                                <configuration>
-                                    <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</dataFile>
-                                    <outputDirectory>${project.build.directory}/jacoco-integration-reports</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>merge-unit-and-integration</id>
-                                <phase>post-integration-test</phase>
-                                <goals>
-                                    <goal>merge</goal>
-                                </goals>
-                                <configuration>
-                                    <fileSets>
-                                        <fileSet>
-                                            <directory>${project.build.directory}/</directory>
-                                            <includes>
-                                                <include>*.exec</include>
-                                            </includes>
-                                        </fileSet>
-                                    </fileSets>
-                                    <destFile>${project.build.directory}/${project.build.finalName}-merged.exec</destFile>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>create-merged-report</id>
-                                <phase>post-integration-test</phase>
-                                <goals>
-                                    <goal>report</goal>
-                                    <goal>check</goal>
-                                </goals>
-                                <configuration>
-                                    <dataFile>${project.build.directory}/${project.build.finalName}-merged.exec</dataFile>
-                                    <outputDirectory>${project.build.directory}/jacoco-merged-reports</outputDirectory>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                    <!-- overwrite argLine-->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <argLine>@{surefire.jacoco.args} -Xmx1024m</argLine>
-                        </configuration>
-                    </plugin>
-                    <!-- for IT-->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-failsafe-plugin</artifactId>
-                        <configuration>
-                            <argLine>@{failsafe.jacoco.args} -Xmx1024m</argLine>
-                        </configuration>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>integration-test</goal>
-                                    <goal>verify</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <!-- upload code coverage report to coveralls.io-->
-        <!-- to enable coveralls locally, you need to get the repoToken from https://coveralls.io/github/apache/iotdb.
+                                                            
+                    <limit implementation="org.jacoco.report.check.Limit">
+                                                                  
+                      <counter>METHOD</counter>
+                                                                  
+                      <value>COVEREDRATIO</value>
+                                                                  
+                      <minimum>0.00</minimum>
+                                                              
+                    </limit>
+                                                            
+                    <!-- if-else, swtich etc.. >=70% -->
+                                                            
+                    <limit implementation="org.jacoco.report.check.Limit">
+                                                                  
+                      <counter>BRANCH</counter>
+                                                                  
+                      <value>COVEREDRATIO</value>
+                                                                  
+                      <minimum>0.00</minimum>
+                                                              
+                    </limit>
+                                                            
+                    <!-- class files >=95% -->
+                                                            
+                    <limit implementation="org.jacoco.report.check.Limit">
+                                                                  
+                      <counter>CLASS</counter>
+                                                                  
+                      <value>COVEREDRATIO</value>
+                                                                  
+                      <minimum>0.00</minimum>
+                                                              
+                    </limit>
+                                                        
+                  </limits>
+                                                  
+                </rule>
+                                            
+              </rules>
+                                      
+            </configuration>
+                                    
+            <executions>
+                                          
+              <!-- see https://natritmeyer.com/howto/reporting-aggregated-unit-and-integration-test-coverage-with-jacoco/-->
+                                          
+              <!-- For UT-->
+                                          
+              <execution>
+                                                
+                <id>prepare-ut</id>
+                                                
+                <goals>
+                                                      
+                  <goal>prepare-agent</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <destFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</destFile>
+                                                      
+                  <propertyName>surefire.jacoco.args</propertyName>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <!-- attached to Maven test phase -->
+                                          
+              <execution>
+                                                
+                <id>ut-report</id>
+                                                
+                <phase>test</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>report</goal>
+                                                      
+                  <goal>check</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-unit-tests.exec</dataFile>
+                                                      
+                  <outputDirectory>${project.build.directory}/jacoco-unit-reports</outputDirectory>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <!-- For IT-->
+                                          
+              <execution>
+                                                
+                <id>before-integration-test-execution</id>
+                                                
+                <phase>pre-integration-test</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>prepare-agent</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <destFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</destFile>
+                                                      
+                  <propertyName>failsafe.jacoco.args</propertyName>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <execution>
+                                                
+                <id>after-integration-test-execution</id>
+                                                
+                <phase>integration-test</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>report</goal>
+                                                      
+                  <goal>check</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <dataFile>${project.build.directory}/${project.build.finalName}-jacoco-integration-tests.exec</dataFile>
+                                                      
+                  <outputDirectory>${project.build.directory}/jacoco-integration-reports</outputDirectory>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <execution>
+                                                
+                <id>merge-unit-and-integration</id>
+                                                
+                <phase>post-integration-test</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>merge</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <fileSets>
+                                                            
+                    <fileSet>
+                                                                  
+                      <directory>${project.build.directory}/</directory>
+                                                                  
+                      <includes>
+                                                                        
+                        <include>*.exec</include>
+                                                                    
+                      </includes>
+                                                              
+                    </fileSet>
+                                                        
+                  </fileSets>
+                                                      
+                  <destFile>${project.build.directory}/${project.build.finalName}-merged.exec</destFile>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                          
+              <execution>
+                                                
+                <id>create-merged-report</id>
+                                                
+                <phase>post-integration-test</phase>
+                                                
+                <goals>
+                                                      
+                  <goal>report</goal>
+                                                      
+                  <goal>check</goal>
+                                                  
+                </goals>
+                                                
+                <configuration>
+                                                      
+                  <dataFile>${project.build.directory}/${project.build.finalName}-merged.exec</dataFile>
+                                                      
+                  <outputDirectory>${project.build.directory}/jacoco-merged-reports</outputDirectory>
+                                                  
+                </configuration>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                              
+          <!-- overwrite argLine-->
+                              
+          <plugin>
+                                    
+            <groupId>org.apache.maven.plugins</groupId>
+                                    
+            <artifactId>maven-surefire-plugin</artifactId>
+                                    
+            <configuration>
+                                          
+              <argLine>@{surefire.jacoco.args} -Xmx1024m</argLine>
+                                      
+            </configuration>
+                                
+          </plugin>
+                              
+          <!-- for IT-->
+                              
+          <plugin>
+                                    
+            <groupId>org.apache.maven.plugins</groupId>
+                                    
+            <artifactId>maven-failsafe-plugin</artifactId>
+                                    
+            <configuration>
+                                          
+              <argLine>@{failsafe.jacoco.args} -Xmx1024m</argLine>
+                                      
+            </configuration>
+                                    
+            <executions>
+                                          
+              <execution>
+                                                
+                <goals>
+                                                      
+                  <goal>integration-test</goal>
+                                                      
+                  <goal>verify</goal>
+                                                  
+                </goals>
+                                            
+              </execution>
+                                      
+            </executions>
+                                
+          </plugin>
+                          
+        </plugins>
+                    
+      </build>
+              
+    </profile>
+            
+    <!-- upload code coverage report to coveralls.io-->
+            
+    <!-- to enable coveralls locally, you need to get the repoToken from https://coveralls.io/github/apache/iotdb.
              use `mvn post-integration-test -Pcode-coverage -DrepoToken=TOKEN`-->
-        <profile>
-            <id>enforce</id>
-            <properties>
-                <enforcer.skip>false</enforcer.skip>
-            </properties>
-        </profile>
-    </profiles>
+            
+    <profile>
+                  
+      <id>enforce</id>
+                  
+      <properties>
+                        
+        <enforcer.skip>false</enforcer.skip>
+                    
+      </properties>
+              
+    </profile>
+        
+  </profiles>
+  
 </project>
diff --git a/server/pom.xml b/server/pom.xml
index 8530d66..0abc23e 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -232,6 +232,12 @@
             <artifactId>micrometer-metrics</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <!-- Experimental -->
+        <dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>janino</artifactId>
+            <version>3.1.6</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/tsfile/pom.xml b/tsfile/pom.xml
index 10a39ad..3b31590 100644
--- a/tsfile/pom.xml
+++ b/tsfile/pom.xml
@@ -58,6 +58,41 @@
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.calcite/calcite-linq4j -->
+        <dependency>
+            <groupId>org.apache.calcite</groupId>
+            <artifactId>calcite-linq4j</artifactId>
+            <version>1.29.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.calcite.avatica</groupId>
+            <artifactId>avatica</artifactId>
+            <version>1.8.0</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>janino</artifactId>
+            <version>3.1.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.janino</groupId>
+            <artifactId>janino</artifactId>
+            <version>3.1.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.openjdk.jmh/jmh-core -->
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-core</artifactId>
+            <version>1.34</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openjdk.jmh</groupId>
+            <artifactId>jmh-generator-annprocess</artifactId>
+            <version>1.34</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/DynamicFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/DynamicFilter.java
new file mode 100644
index 0000000..4b3ef3b
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/DynamicFilter.java
@@ -0,0 +1,52 @@
+package org.apache.iotdb.tsfile.read.filter.codegen;
+
+import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
+
+import java.io.DataOutputStream;
+import java.nio.ByteBuffer;
+
+public abstract class DynamicFilter implements Filter {
+
+  protected final Filter delegate;
+
+  public DynamicFilter(Filter delegate) {
+    this.delegate = delegate;
+  }
+
+  @Override
+  public boolean satisfy(Statistics statistics) {
+    return this.delegate.satisfy(statistics);
+  }
+
+  @Override
+  public boolean satisfyStartEndTime(long startTime, long endTime) {
+    return this.delegate.satisfyStartEndTime(startTime, endTime);
+  }
+
+  @Override
+  public boolean containStartEndTime(long startTime, long endTime) {
+    return this.delegate.containStartEndTime(startTime, endTime);
+  }
+
+  @Override
+  public Filter copy() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void serialize(DataOutputStream outputStream) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void deserialize(ByteBuffer buffer) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public FilterSerializeId getSerializeId() {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/GenerableFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/GenerableFilter.java
new file mode 100644
index 0000000..4b7d8b6
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/GenerableFilter.java
@@ -0,0 +1,12 @@
+package org.apache.iotdb.tsfile.read.filter.codegen;
+
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+
+public interface GenerableFilter extends Filter {
+
+  boolean canGenerate();
+
+  Expression generate();
+
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/Generator.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/Generator.java
new file mode 100644
index 0000000..497a2c6
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/codegen/Generator.java
@@ -0,0 +1,69 @@
+package org.apache.iotdb.tsfile.read.filter.codegen;
+
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.calcite.linq4j.tree.MethodDeclaration;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+
+import org.codehaus.commons.compiler.CompileException;
+import org.codehaus.janino.ClassBodyEvaluator;
+import org.codehaus.janino.Scanner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.xml.stream.FactoryConfigurationError;
+import java.io.IOException;
+import java.io.StringReader;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class Generator {
+
+  private static Logger logger = LoggerFactory.getLogger(Generator.class);
+
+  public static AtomicBoolean active = new AtomicBoolean(true);
+  private static AtomicLong count = new AtomicLong(1);
+
+  public static Filter generate(GenerableFilter filter) {
+    if (active.get() == false) {
+      return filter;
+    }
+    long start = System.nanoTime();
+    if (filter.canGenerate() == false) {
+      return filter;
+    }
+
+    Expression e = filter.generate();
+
+    // Build a method (public -> modifier 1)
+    MethodDeclaration m = Expressions.methodDecl(1, Boolean.TYPE, "satisfy", Arrays.asList(Expressions.parameter(Long.TYPE, "time"), Expressions.parameter(Object.class, "v")), Expressions.block(Expressions.return_(null, e)));
+
+    String s = Expressions.toString(m);
+
+    logger.debug("Generated Filter expression is: \n" + s);
+
+    String className = "DynamicFilter" + count.getAndIncrement();
+
+    String s2 = "import org.apache.iotdb.tsfile.read.filter.basic.Filter;" +
+        "" +
+        "public " + className + "(Filter delegate) {\nsuper(delegate);\n}\n\n" + s;
+
+    try {
+      Scanner scanner = new Scanner("", new StringReader(s2));
+      ClassBodyEvaluator ev = new ClassBodyEvaluator(scanner, className, DynamicFilter.class, new Class[]{Filter.class}, null);
+
+      Filter f = (Filter) ev.getClazz().getConstructors()[0].newInstance(filter);
+
+      long end = System.nanoTime();
+
+      logger.debug("Generation time took {} ms", (end - start) / 1e6);
+
+      return f;
+    } catch (CompileException | IllegalAccessException | InstantiationException | InvocationTargetException | IOException ex) {
+      ex.printStackTrace();
+      return filter;
+    }
+  }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
index 9fe6a60..b9c6501 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/AndFilter.java
@@ -18,13 +18,16 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.BinaryFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 
 /** Both the left and right operators of AndExpression must satisfy the condition. */
-public class AndFilter extends BinaryFilter {
+public class AndFilter extends BinaryFilter implements GenerableFilter {
 
   private static final long serialVersionUID = -8212850098906044102L;
 
@@ -70,4 +73,18 @@ public class AndFilter extends BinaryFilter {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.AND;
   }
+
+
+  @Override
+  public boolean canGenerate() {
+    return (left instanceof GenerableFilter) && (right instanceof GenerableFilter);
+  }
+
+  @Override
+  public Expression generate() {
+    if (!this.canGenerate()) {
+      throw new RuntimeException("Children are no generable filters!");
+    }
+    return Expressions.and(((GenerableFilter) left).generate(), ((GenerableFilter) right).generate());
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
index 7a69be9..794bc46 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Eq.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class Eq<T extends Comparable<T>> extends UnaryFilter<T> {
+public class Eq<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = -6668083116644568248L;
 
@@ -94,4 +98,23 @@ public class Eq<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.EQ;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.equal(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        return Expressions.call(Expressions.parameter(Object.class, "v"), Object.class.getMethod("equals", Object.class), Expressions.constant(value));
+      } catch (NoSuchMethodException e) {
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
index 0719397..da07282 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Gt.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class Gt<T extends Comparable<T>> extends UnaryFilter<T> {
+public class Gt<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = -2088181659871608986L;
 
@@ -92,4 +96,25 @@ public class Gt<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.GT;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.greaterThan(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        // return this.value.compareTo((T) v) < 0;
+        return Expressions.lessThan(Expressions.call(Expressions.box(Expressions.constant(value)), Comparable.class.getMethod("compareTo", Object.class), Expressions.parameter(Object.class, "v")),Expressions.constant(0));
+      } catch (NoSuchMethodException e) {
+        e.printStackTrace();
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
index 4e811e1..3a3d772 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/GtEq.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class GtEq<T extends Comparable<T>> extends UnaryFilter<T> {
+public class GtEq<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = -2088181659871608986L;
 
@@ -92,4 +96,25 @@ public class GtEq<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.GTEQ;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.greaterThanOrEqual(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        // return this.value.compareTo((T) v) < 0;
+        return Expressions.lessThanOrEqual(Expressions.call(Expressions.box(Expressions.constant(value)), Comparable.class.getMethod("compareTo", Object.class), Expressions.parameter(Object.class, "v")),Expressions.constant(0));
+      } catch (NoSuchMethodException e) {
+        e.printStackTrace();
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
index 9c83b72..98f32d9 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Lt.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class Lt<T extends Comparable<T>> extends UnaryFilter<T> {
+public class Lt<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = -2088181659871608986L;
 
@@ -92,4 +96,24 @@ public class Lt<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.LT;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.lessThan(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        // return this.value.compareTo((T) v) > 0;
+        return Expressions.greaterThan(Expressions.call(Expressions.box(Expressions.constant(value)), Comparable.class.getMethod("compareTo", Object.class), Expressions.parameter(Object.class, "v")),Expressions.constant(0));
+      } catch (NoSuchMethodException e) {
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
index b68b1b4..a3ce54c 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/LtEq.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class LtEq<T extends Comparable<T>> extends UnaryFilter<T> {
+public class LtEq<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = -2088181659871608986L;
 
@@ -92,4 +96,24 @@ public class LtEq<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.LTEQ;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.lessThanOrEqual(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        // return this.value.compareTo((T) v) > 0;
+        return Expressions.greaterThanOrEqual(Expressions.call(Expressions.box(Expressions.constant(value)), Comparable.class.getMethod("compareTo", Object.class), Expressions.parameter(Object.class, "v")),Expressions.constant(0));
+      } catch (NoSuchMethodException e) {
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
index 55abda1..fe08921 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/NotEq.java
@@ -18,10 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 
@@ -30,7 +34,7 @@ import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
  *
  * @param <T> comparable data type
  */
-public class NotEq<T extends Comparable<T>> extends UnaryFilter<T> {
+public class NotEq<T extends Comparable<T>> extends UnaryFilter<T> implements GenerableFilter {
 
   private static final long serialVersionUID = 2574090797476500965L;
 
@@ -94,4 +98,23 @@ public class NotEq<T extends Comparable<T>> extends UnaryFilter<T> {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.NEQ;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    if (filterType == FilterType.TIME_FILTER) {
+      return Expressions.notEqual(Expressions.parameter(Object.class, "time"), Expressions.constant(value));
+    } else if (filterType == FilterType.VALUE_FILTER) {
+      try {
+        return Expressions.negate(Expressions.call(Expressions.parameter(Object.class, "v"), Object.class.getMethod("equals", Object.class), Expressions.constant(value)));
+      } catch (NoSuchMethodException e) {
+        throw new IllegalStateException();
+      }
+    }
+    throw new NotImplementedException();
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
index 32e4593..cc0c7ae 100755
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/OrFilter.java
@@ -18,15 +18,18 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.BinaryFilter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 
 import java.io.Serializable;
 
 /** Either of the left and right operators of AndExpression must satisfy the condition. */
-public class OrFilter extends BinaryFilter implements Serializable {
+public class OrFilter extends BinaryFilter implements Serializable, GenerableFilter {
 
   private static final long serialVersionUID = -968055896528472694L;
 
@@ -72,4 +75,17 @@ public class OrFilter extends BinaryFilter implements Serializable {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.OR;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return (left instanceof GenerableFilter) && (right instanceof GenerableFilter);
+  }
+
+  @Override
+  public Expression generate() {
+    if (!this.canGenerate()) {
+      throw new RuntimeException("Children are no generable filters!");
+    }
+    return Expressions.or(((GenerableFilter) left).generate(), ((GenerableFilter) right).generate());
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
index 646b51b..703114e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/filter/operator/Regexp.java
@@ -18,8 +18,11 @@
  */
 package org.apache.iotdb.tsfile.read.filter.operator;
 
+import org.apache.calcite.linq4j.tree.Expression;
+import org.apache.calcite.linq4j.tree.Expressions;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterSerializeId;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -27,6 +30,7 @@ import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Arrays;
 import java.util.Objects;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
@@ -36,7 +40,7 @@ import java.util.regex.PatternSyntaxException;
  *
  * @param <T> comparable data type
  */
-public class Regexp<T extends Comparable<T>> implements Filter {
+public class Regexp<T extends Comparable<T>> implements Filter, GenerableFilter {
 
   protected String value;
 
@@ -124,4 +128,18 @@ public class Regexp<T extends Comparable<T>> implements Filter {
   public FilterSerializeId getSerializeId() {
     return FilterSerializeId.REGEXP;
   }
+
+  @Override
+  public boolean canGenerate() {
+    return true;
+  }
+
+  @Override
+  public Expression generate() {
+    // Simply access the delegate
+    return Expressions.call(Expressions.parameter(Filter.class, "delegate"), "satisfy", Arrays.asList(
+        Expressions.parameter(Long.TYPE, "time"),
+        Expressions.parameter(Object.class, "v")
+    ));
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
index 9318839..6a7e46d 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/FileSeriesReader.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.read.common.Chunk;
 import org.apache.iotdb.tsfile.read.controller.IChunkLoader;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.Generator;
 import org.apache.iotdb.tsfile.read.reader.chunk.AlignedChunkReader;
 import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReader;
 
@@ -39,7 +41,8 @@ public class FileSeriesReader extends AbstractFileSeriesReader {
 
   public FileSeriesReader(
       IChunkLoader chunkLoader, List<IChunkMetadata> chunkMetadataList, Filter filter) {
-    super(chunkLoader, chunkMetadataList, filter);
+    super(chunkLoader, chunkMetadataList, Generator.generate((GenerableFilter) filter));
+//    super(chunkLoader, chunkMetadataList, filter);
   }
 
   @Override
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/operator/GeneratorTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/operator/GeneratorTest.java
new file mode 100644
index 0000000..37d5433
--- /dev/null
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/operator/GeneratorTest.java
@@ -0,0 +1,87 @@
+package org.apache.iotdb.tsfile.read.filter.operator;
+
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.GenerableFilter;
+import org.apache.iotdb.tsfile.read.filter.codegen.Generator;
+import org.apache.iotdb.tsfile.read.filter.factory.FilterType;
+import org.codehaus.commons.compiler.CompileException;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class GeneratorTest {
+
+  @Test
+  public void generateEq() throws CompileException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    Eq<Integer> timeFilter = new Eq<>(5, FilterType.TIME_FILTER);
+
+    Filter f = Generator.generate(timeFilter);
+
+
+    assertTrue(f.satisfy(5L, null));
+    assertFalse(f.satisfy(4L, null));
+  }
+
+  @Test
+  public void generateGt() throws CompileException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    Gt<Integer> timeFilter = new Gt<>(5, FilterType.TIME_FILTER);
+
+    Filter f = Generator.generate(timeFilter);
+
+
+    assertFalse(f.satisfy(5L, null));
+    assertTrue(f.satisfy(4L, null));
+  }
+
+  @Test
+  public void generateAnd() throws CompileException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    GenerableFilter filter = new AndFilter(new Eq<>(5, FilterType.TIME_FILTER), new Eq<>(6, FilterType.VALUE_FILTER));
+
+    Filter f = Generator.generate(filter);
+
+
+    assertTrue(f.satisfy(5L, 6));
+    assertFalse(f.satisfy(4L, 4));
+  }
+
+  @Test
+  public void generateRegex() throws CompileException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    GenerableFilter filter = new Regexp<>(".*", FilterType.VALUE_FILTER);
+
+    Filter f = Generator.generate(filter);
+
+
+    assertTrue(f.satisfy(5L, "a"));
+  }
+
+  @Test
+  public void generateComplex() throws CompileException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException {
+    GenerableFilter filter = new AndFilter(
+        new AndFilter(
+            new Gt<>(50, FilterType.TIME_FILTER),
+            new Lt<>(100, FilterType.TIME_FILTER)
+        ),
+        new OrFilter(
+            new AndFilter(
+                new Gt<>(4, FilterType.VALUE_FILTER),
+                new Lt<>(6, FilterType.VALUE_FILTER)
+            ),
+            new AndFilter(
+                new Gt<>(9, FilterType.VALUE_FILTER),
+                new Lt<>(13, FilterType.VALUE_FILTER)
+            )
+        )
+    );
+
+    Filter f = Generator.generate(filter);
+
+
+    assertTrue(f.satisfy(51L, 5));
+    assertFalse(f.satisfy(51L, 4));
+    assertFalse(f.satisfy(50L, 5));
+  }
+}
\ No newline at end of file
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/PerformTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/PerformTest.java
new file mode 100644
index 0000000..c8732b5
--- /dev/null
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/PerformTest.java
@@ -0,0 +1,24 @@
+package org.apache.iotdb.tsfile.write;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+public class PerformTest {
+
+    @Benchmark
+    public void test() {
+      // todo
+    }
+
+    public static void main(String[] args) throws RunnerException {
+      Options opt = new OptionsBuilder()
+          .include(PerformTest.class.getSimpleName())
+          .build();
+
+      new Runner(opt).run();
+    }
+
+}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFilterPerformanceTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFilterPerformanceTest.java
new file mode 100644
index 0000000..7d210a3
--- /dev/null
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFilterPerformanceTest.java
@@ -0,0 +1,410 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.tsfile.write;
+
+import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.read.TsFileReader;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
+import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+import org.apache.iotdb.tsfile.read.expression.IExpression;
+import org.apache.iotdb.tsfile.read.expression.QueryExpression;
+import org.apache.iotdb.tsfile.read.expression.impl.BinaryExpression;
+import org.apache.iotdb.tsfile.read.expression.impl.GlobalTimeExpression;
+import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
+import org.apache.iotdb.tsfile.read.filter.TimeFilter;
+import org.apache.iotdb.tsfile.read.filter.ValueFilter;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.apache.iotdb.tsfile.read.filter.codegen.Generator;
+import org.apache.iotdb.tsfile.read.filter.factory.FilterFactory;
+import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
+import org.apache.iotdb.tsfile.utils.FilePathUtils;
+import org.apache.iotdb.tsfile.utils.TsFileGeneratorForTest;
+import org.apache.iotdb.tsfile.write.record.TSRecord;
+import org.apache.iotdb.tsfile.write.record.datapoint.FloatDataPoint;
+import org.apache.iotdb.tsfile.write.record.datapoint.IntDataPoint;
+import org.apache.iotdb.tsfile.write.schema.UnaryMeasurementSchema;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+@State(Scope.Benchmark)
+public class TsFilterPerformanceTest {
+
+  private static Logger logger = LoggerFactory.getLogger(TsFilterPerformanceTest.class);
+
+  public static int runs = 1;
+
+  TsFileWriter writer = null;
+  String fileName = TsFileGeneratorForTest.getTestTsFilePath("root.sg1", 0, 0, 1);
+  boolean closed = false;
+
+  String getFilename() {
+    String filePath =
+        String.format(
+            "/tmp/root.sg1/0/0/",
+            "root.sg1",
+            0,
+            0);
+    String fileName =
+        100
+            + FilePathUtils.FILE_NAME_SEPARATOR
+            + 1
+            + "-0-0.tsfile";
+    return filePath.concat(fileName);
+  }
+
+  /**
+   * Benchmark                                     Mode  Cnt      Score     Error  Units
+   * TsFilterPerformanceTest.getSimpleUnoptimized  avgt   15  10699,176 ± 511,309  ms/op
+   * @throws IOException
+   */
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  @Warmup(iterations = 3)
+  @Fork(3)
+  public void getSimpleUnoptimized() throws IOException {
+    List<Filter> filters = getSimpleFilters();
+    runTests(filters, false);
+  }
+
+  /**
+   * Benchmark                                   Mode  Cnt      Score     Error  Units
+   * TsFilterPerformanceTest.getSimpleOptimized  avgt   15  11084,838 ± 331,142  ms/op
+   * @throws IOException
+   */
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  @Warmup(iterations = 3)
+  @Fork(3)
+  public void getSimpleOptimized() throws IOException {
+    List<Filter> filters = getSimpleFilters();
+    runTests(filters, true);
+  }
+
+
+  /**
+   * Benchmark                                       Mode  Cnt      Score     Error  Units
+   * TsFilterPerformanceTest.getStandardUnoptimized  avgt   15  10345,496 ± 571,557  ms/op
+   * @throws IOException
+   */
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  @Warmup(iterations = 3)
+  @Fork(3)
+  public void getStandardUnoptimized() throws IOException {
+    List<Filter> filters = getStandardFilters();
+    runTests(filters, false);
+  }
+
+  /**
+   * Benchmark                                     Mode  Cnt     Score     Error  Units
+   * TsFilterPerformanceTest.getStandardOptimized  avgt   15  9864,581 ± 591,591  ms/op
+   * -> 4.6%
+   * @throws IOException
+   */
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  @Warmup(iterations = 3)
+  @Fork(3)
+  public void getStandardOptimized() throws IOException {
+    List<Filter> filters = getStandardFilters();
+    runTests(filters, true);
+  }
+
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  @Warmup(iterations = 3)
+  @Fork(3)
+  public void getComplexUnoptimized() throws IOException {
+    List<Filter> filters = getComplexFilters();
+    runTests(filters, false);
+  }
+
+  @Test
+  public void generate() throws IOException, WriteProcessException {
+    String filename = getFilename();
+
+    System.out.println("Writing to " + filename);
+    File f = new File(filename);
+    if (!f.getParentFile().exists()) {
+      Assert.assertTrue(f.getParentFile().mkdirs());
+    }
+    writer = new TsFileWriter(f);
+    registerTimeseries();
+
+    for (long t = 0; t <= 100_000_000; t++) {
+      if (t % 100 == 0) {
+        System.out.println(t);
+      }
+      // normal
+      TSRecord record = new TSRecord(t, "d1");
+      record.addTuple(new FloatDataPoint("s1", (float) (100.0 * Math.random())));
+      record.addTuple(new IntDataPoint("s2", (int) (100.0 * Math.random())));
+      writer.write(record);
+    }
+
+    writer.close();
+  }
+
+
+  /**
+   * Without optimization: 10798.055595900001 ms
+   * With: 9907.020887499999
+   * Improvement ~ 8%
+   */
+  @Test
+  public void readMany() throws IOException {
+    List<List<Filter>> scenarios = Arrays.asList(
+        getSimpleFilters(),
+        getStandardFilters(),
+        getComplexFilters()
+    );
+
+    ArrayList<Double> results = new ArrayList<>();
+
+    for (int scenarioCount = 0; scenarioCount < scenarios.size(); scenarioCount++) {
+      System.out.println("Starting Scenario " + scenarioCount);
+      List<Filter> filter = scenarios.get(scenarioCount);
+
+      // First, no optimizer
+      double noOptimizer = runTests(filter, false);
+      double optimizer = runTests(filter, true);
+      double improvement = 100.0 * (1 - optimizer / noOptimizer);
+
+      System.out.println("==========================");
+      System.out.println("Scenario " + scenarioCount);
+      System.out.println("==========================");
+      System.out.printf("Duration (no optimizer): %.2f ms\n", noOptimizer);
+      System.out.printf("Duration (optimizer): %.2f ms\n", optimizer);
+      System.out.printf("Improvement: %.2f %%\n\n", improvement);
+
+      results.add(improvement);
+    }
+
+    System.out.println("==========================");
+    System.out.println("Final Result");
+    System.out.println("==========================");
+    for (Double result : results) {
+      System.out.printf("Improvement: %.2f %%\n", result);
+    }
+    System.out.println("==========================");
+  }
+
+  private double runTests(List<Filter> filter, boolean optimizer) throws IOException {
+    Generator.active.set(optimizer);
+    long start = System.nanoTime();
+    for (int i = 1; i <= runs; i++) {
+      logger.info("Round " + i);
+      read(filter);
+    }
+    long end = System.nanoTime();
+
+    double durationMs = (end - start) / 1e6;
+
+    return durationMs;
+  }
+
+  private List<Filter> getSimpleFilters() {
+    Filter filter = TimeFilter.lt(50_000_000);
+    Filter filter2 = ValueFilter.gt(50);
+    Filter filter3 = TimeFilter.ltEq(50_000_000);
+
+    List<Filter> filters = Arrays.asList(
+        filter, filter2, filter3
+    );
+    return filters;
+  }
+
+  private List<Filter> getStandardFilters() {
+    Filter filter = TimeFilter.lt(50_000_000);
+    Filter filter2 = FilterFactory.and(ValueFilter.gt(25), ValueFilter.lt(75));
+    Filter filter3 =
+        FilterFactory.and(TimeFilter.gtEq(10_000_000), TimeFilter.ltEq(40_000_000));
+
+    List<Filter> filters = Arrays.asList(
+        filter, filter2, filter3
+    );
+    return filters;
+  }
+
+  private List<Filter> getComplexFilters() {
+    Filter filter = FilterFactory.and(TimeFilter.gt(10_000_000), TimeFilter.lt(90_000_000));
+    Filter filter2 = FilterFactory.or(FilterFactory.or(
+            FilterFactory.and(ValueFilter.gt(15), ValueFilter.lt(30)),
+            FilterFactory.and(ValueFilter.gt(45), ValueFilter.lt(60))
+        ),
+        FilterFactory.and(ValueFilter.gt(70), ValueFilter.lt(90))
+    );
+    Filter filter3 =
+        FilterFactory.or(
+            FilterFactory.and(TimeFilter.gtEq(10_000_000), TimeFilter.ltEq(20_000_000)),
+            FilterFactory.and(TimeFilter.gtEq(30_000_000), TimeFilter.ltEq(40_000_000))
+        );
+
+    List<Filter> filters = Arrays.asList(
+        filter, filter2, filter3
+    );
+    return filters;
+  }
+
+  public void read(List<Filter> filters) throws IOException {
+    TsFileSequenceReader fileSequenceReader = new TsFileSequenceReader(getFilename());
+    TsFileReader fileReader = new TsFileReader(fileSequenceReader);
+
+    IExpression IExpression =
+        BinaryExpression.or(
+            BinaryExpression.and(
+                new SingleSeriesExpression(new Path("d1", "s1"), filters.get(0)),
+                new SingleSeriesExpression(new Path("d1", "s2"), filters.get(1))),
+            new GlobalTimeExpression(filters.get(2)));
+
+    QueryExpression queryExpression =
+        QueryExpression.create()
+            .addSelectedPath(new Path("d1", "s1"))
+            .addSelectedPath(new Path("d1", "s2"))
+            .setExpression(IExpression);
+
+    fileSequenceReader.getAllDevices();
+
+    logger.debug("Starting query...");
+    QueryDataSet dataSet = fileReader.query(queryExpression);
+
+
+    logger.debug("Query done, start iteration...");
+
+    int count = 0;
+    while (dataSet.hasNext()) {
+      RowRecord rowRecord = dataSet.next();
+      count++;
+    }
+
+    logger.debug("Iterartion done, " + count + " points");
+  }
+
+  private void registerTimeseries() {
+    // register nonAligned timeseries "d1.s1","d1.s2","d1.s3"
+    try {
+      writer.registerTimeseries(
+          new Path("d1"),
+          new UnaryMeasurementSchema(
+              "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY));
+    } catch (WriteProcessException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+    try {
+      writer.registerTimeseries(
+          new Path("d1"),
+          new UnaryMeasurementSchema(
+              "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY));
+    } catch (WriteProcessException e) {
+      Assert.assertEquals("given nonAligned timeseries d1.s1 has been registered.", e.getMessage());
+    }
+    try {
+      List<UnaryMeasurementSchema> schemas = new ArrayList<>();
+      schemas.add(
+          new UnaryMeasurementSchema(
+              "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY));
+      writer.registerAlignedTimeseries(new Path("d1"), schemas);
+    } catch (WriteProcessException e) {
+      Assert.assertEquals(
+          "given device d1 has been registered for nonAligned timeseries.", e.getMessage());
+    }
+    List<UnaryMeasurementSchema> schemas = new ArrayList<>();
+    schemas.add(
+        new UnaryMeasurementSchema("s2", TSDataType.INT32, TSEncoding.RLE, CompressionType.SNAPPY));
+    schemas.add(
+        new UnaryMeasurementSchema("s3", TSDataType.INT32, TSEncoding.RLE, CompressionType.SNAPPY));
+    writer.registerTimeseries(new Path("d1"), schemas);
+
+    // Register aligned timeseries "d2.s1" , "d2.s2", "d2.s3"
+    try {
+      List<UnaryMeasurementSchema> measurementSchemas = new ArrayList<>();
+      measurementSchemas.add(new UnaryMeasurementSchema("s1", TSDataType.TEXT, TSEncoding.PLAIN));
+      measurementSchemas.add(new UnaryMeasurementSchema("s2", TSDataType.TEXT, TSEncoding.PLAIN));
+      measurementSchemas.add(new UnaryMeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN));
+      writer.registerAlignedTimeseries(new Path("d2"), measurementSchemas);
+    } catch (WriteProcessException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+    try {
+      List<UnaryMeasurementSchema> measurementSchemas = new ArrayList<>();
+      measurementSchemas.add(new UnaryMeasurementSchema("s4", TSDataType.TEXT, TSEncoding.PLAIN));
+      writer.registerAlignedTimeseries(new Path("d2"), measurementSchemas);
+    } catch (WriteProcessException e) {
+      Assert.assertEquals(
+          "given device d2 has been registered for aligned timeseries and should not be expanded.",
+          e.getMessage());
+    }
+    try {
+      writer.registerTimeseries(
+          new Path("d2"),
+          new UnaryMeasurementSchema(
+              "s5", TSDataType.INT32, TSEncoding.RLE, CompressionType.SNAPPY));
+    } catch (WriteProcessException e) {
+      Assert.assertEquals(
+          "given device d2 has been registered for aligned timeseries.", e.getMessage());
+    }
+
+    /*try {
+      for (int i = 2; i < 3; i++) {
+        writer.registerTimeseries(
+            new Path("d" + i, "s1"),
+            new UnaryMeasurementSchema(
+                "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY));
+      }
+    } catch (WriteProcessException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }*/
+  }
+
+}