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

lta pushed a commit to branch cluster
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 4abde09c4e71a8de156a63a495d47fff3d5547c0
Author: lta <[email protected]>
AuthorDate: Fri May 17 17:47:59 2019 +0800

    add aggregation query it
---
 .../org/apache/iotdb/cluster/entity/Server.java    |  24 +-
 .../cluster/integration/IoTDBAggregationIT.java    |   5 -
 .../integration/IoTDBAggregationLargeDataIT.java   | 916 +++++++++++++++++++++
 .../integration/IoTDBAggregationSmallDataIT.java   | 760 +++++++++++++++++
 .../cluster/integration/IoTDBFillQueryIT.java      |   1 -
 .../integration/IoTDBMetadataFetchLocallyIT.java   |   1 -
 .../iotdb/cluster/integration/IoTDBQueryIT.java    |   1 -
 .../cluster/integration/IoTDBQueryLargeDataIT.java |   2 -
 .../apache/iotdb/cluster/utils/RaftUtilsTest.java  |  19 +-
 .../java/org/apache/iotdb/cluster/utils/Utils.java |   5 +
 .../iotdb/db/engine/filenode/FileNodeManager.java  |   3 +
 11 files changed, 1709 insertions(+), 28 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/entity/Server.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/entity/Server.java
index 842d2ed..c6cb03b 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/entity/Server.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/entity/Server.java
@@ -121,16 +121,20 @@ public class Server {
     Router router = Router.getInstance();
     PhysicalNode[][] groups = router.getGroupsNodes(serverId.getIp(), 
serverId.getPort());
 
-    for (int i = 0; i < groups.length; i++) {
-      PhysicalNode[] group = groups[i];
-      String groupId = router.getGroupID(group);
-      DataPartitionHolder dataPartitionHolder = new 
DataPartitionRaftHolder(groupId,
-          RaftUtils.getPeerIdArrayFrom(group), serverId, rpcServer, false);
-      dataPartitionHolder.init();
-      dataPartitionHolder.start();
-      dataPartitionHolderMap.put(groupId, dataPartitionHolder);
-      LOGGER.info("{} group has started", groupId);
-      Router.getInstance().showPhysicalNodes(groupId);
+    try {
+      for (int i = 0; i < groups.length; i++) {
+        PhysicalNode[] group = groups[i];
+        String groupId = router.getGroupID(group);
+        DataPartitionHolder dataPartitionHolder = new 
DataPartitionRaftHolder(groupId,
+            RaftUtils.getPeerIdArrayFrom(group), serverId, rpcServer, false);
+        dataPartitionHolder.init();
+        dataPartitionHolder.start();
+        dataPartitionHolderMap.put(groupId, dataPartitionHolder);
+        LOGGER.info("{} group has started", groupId);
+        Router.getInstance().showPhysicalNodes(groupId);
+      }
+    }catch (Exception e){
+      e.printStackTrace();
     }
 
     try {
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationIT.java
index bf7c4da..201ddf6 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationIT.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationIT.java
@@ -182,11 +182,6 @@ public class IoTDBAggregationIT {
   public void remoteTest() throws SQLException {
     QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
     test();
-    try {
-      Thread.sleep(200);
-    } catch (InterruptedException e) {
-      e.printStackTrace();
-    }
   }
 
   @Test
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationLargeDataIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationLargeDataIT.java
new file mode 100644
index 0000000..973d3e7
--- /dev/null
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationLargeDataIT.java
@@ -0,0 +1,916 @@
+/**
+ * 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.cluster.integration;
+
+import static org.apache.iotdb.cluster.integration.Constant.count;
+import static org.apache.iotdb.cluster.integration.Constant.first;
+import static org.apache.iotdb.cluster.integration.Constant.max_time;
+import static org.apache.iotdb.cluster.integration.Constant.max_value;
+import static org.apache.iotdb.cluster.integration.Constant.mean;
+import static org.apache.iotdb.cluster.integration.Constant.min_value;
+import static org.apache.iotdb.cluster.integration.Constant.sum;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import org.apache.iotdb.cluster.config.ClusterConfig;
+import org.apache.iotdb.cluster.config.ClusterDescriptor;
+import org.apache.iotdb.cluster.entity.Server;
+import org.apache.iotdb.cluster.integration.Constant;
+import org.apache.iotdb.cluster.utils.EnvironmentUtils;
+import org.apache.iotdb.cluster.utils.QPExecutorUtils;
+import org.apache.iotdb.cluster.utils.hash.PhysicalNode;
+import org.apache.iotdb.jdbc.Config;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class IoTDBAggregationLargeDataIT {
+
+  private Server server;
+  private static final ClusterConfig CLUSTER_CONFIG = 
ClusterDescriptor.getInstance().getConfig();
+  private static final PhysicalNode localNode = new 
PhysicalNode(CLUSTER_CONFIG.getIp(),
+      CLUSTER_CONFIG.getPort());
+
+  private static final String TIMESTAMP_STR = "Time";
+  private final String d0s0 = "root.vehicle.d0.s0";
+  private final String d0s1 = "root.vehicle.d0.s1";
+  private final String d0s2 = "root.vehicle.d0.s2";
+  private final String d0s3 = "root.vehicle.d0.s3";
+  private final String d0s4 = "root.vehicle.d0.s4";
+
+  private static String[] createSql = new String[]{
+      "SET STORAGE GROUP TO root.vehicle",
+      "CREATE TIMESERIES root.vehicle.d1.s0 WITH DATATYPE=INT32, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT, 
ENCODING=PLAIN",
+      "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN, 
ENCODING=PLAIN",
+  };
+
+  private static String[] insertSql = new String[]{
+      "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
+      "insert into root.vehicle.d0(timestamp,s0) values(2,198)",
+      "insert into root.vehicle.d0(timestamp,s0) values(100,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(101,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(102,80)",
+      "insert into root.vehicle.d0(timestamp,s0) values(103,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(104,90)",
+      "insert into root.vehicle.d0(timestamp,s0) values(105,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(106,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(2,10000)",
+      "insert into root.vehicle.d0(timestamp,s0) values(50,10000)",
+      "insert into root.vehicle.d0(timestamp,s0) values(1000,22222)",
+      "insert into root.vehicle.d0(timestamp,s0) values(106,199)",
+      "DELETE FROM root.vehicle.d0.s0 WHERE time < 104",
+
+      "insert into root.vehicle.d0(timestamp,s1) values(1,1101)",
+      "insert into root.vehicle.d0(timestamp,s1) values(2,198)",
+      "insert into root.vehicle.d0(timestamp,s1) values(100,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(101,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(102,180)",
+      "insert into root.vehicle.d0(timestamp,s1) values(103,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(104,190)",
+      "insert into root.vehicle.d0(timestamp,s1) values(105,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(2,40000)",
+      "insert into root.vehicle.d0(timestamp,s1) values(50,50000)",
+      "insert into root.vehicle.d0(timestamp,s1) values(1000,55555)",
+
+      "insert into root.vehicle.d0(timestamp,s2) values(1000,55555)",
+      "insert into root.vehicle.d0(timestamp,s2) values(2,2.22)",
+      "insert into root.vehicle.d0(timestamp,s2) values(3,3.33)",
+      "insert into root.vehicle.d0(timestamp,s2) values(4,4.44)",
+      "insert into root.vehicle.d0(timestamp,s2) values(102,10.00)",
+      "insert into root.vehicle.d0(timestamp,s2) values(105,11.11)",
+      "insert into root.vehicle.d0(timestamp,s2) values(1000,1000.11)",
+
+      "insert into root.vehicle.d0(timestamp,s3) values(60,'aaaaa')",
+      "insert into root.vehicle.d0(timestamp,s3) values(70,'bbbbb')",
+      "insert into root.vehicle.d0(timestamp,s3) values(80,'ccccc')",
+      "insert into root.vehicle.d0(timestamp,s3) values(101,'ddddd')",
+      "insert into root.vehicle.d0(timestamp,s3) values(102,'fffff')",
+
+      "insert into root.vehicle.d1(timestamp,s0) values(1,999)",
+      "insert into root.vehicle.d1(timestamp,s0) values(1000,888)",
+
+      "insert into root.vehicle.d0(timestamp,s4) values(100, false)",
+      "insert into root.vehicle.d0(timestamp,s4) values(100, true)",
+  };
+
+  @Before
+  public void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.closeMemControl();
+    CLUSTER_CONFIG.createAllPath();
+    server = Server.getInstance();
+
+    server.start();
+    EnvironmentUtils.envSetUp();
+    Class.forName(Config.JDBC_DRIVER_NAME);
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    server.stop();
+    QPExecutorUtils.setLocalNodeAddr(localNode.getIp(), localNode.getPort());
+    EnvironmentUtils.cleanEnv();
+  }
+
+
+  @Test
+  public void test() throws ClassNotFoundException, SQLException {
+    insertSQL();
+
+    lastAggreWithSingleFilterTest();
+    meanAggreWithSingleFilterTest();
+    sumAggreWithSingleFilterTest();
+    firstAggreWithSingleFilterTest();
+    countAggreWithSingleFilterTest();
+    minMaxTimeAggreWithSingleFilterTest();
+    minValueAggreWithSingleFilterTest();
+    maxValueAggreWithSingleFilterTest();
+
+    lastAggreWithMultiFilterTest();
+    countAggreWithMultiFilterTest();
+    minTimeAggreWithMultiFilterTest();
+    maxTimeAggreWithMultiFilterTest();
+    minValueAggreWithMultiFilterTest();
+    maxValueAggreWithMultiFilterTest();
+    meanAggreWithMultiFilterTest();
+    sumAggreWithMultiFilterTest();
+    firstAggreWithMultiFilterTest();
+  }
+
+  @Test
+  @Ignore
+  public void remoteTest() throws ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    insertSQL();
+
+    lastAggreWithSingleFilterTest();
+    meanAggreWithSingleFilterTest();
+    sumAggreWithSingleFilterTest();
+    firstAggreWithSingleFilterTest();
+    countAggreWithSingleFilterTest();
+    minMaxTimeAggreWithSingleFilterTest();
+    minValueAggreWithSingleFilterTest();
+    maxValueAggreWithSingleFilterTest();
+
+    lastAggreWithMultiFilterTest();
+    countAggreWithMultiFilterTest();
+    minTimeAggreWithMultiFilterTest();
+    maxTimeAggreWithMultiFilterTest();
+    minValueAggreWithMultiFilterTest();
+    maxValueAggreWithMultiFilterTest();
+//    meanAggreWithMultiFilterTest();
+    sumAggreWithMultiFilterTest();
+    firstAggreWithMultiFilterTest();
+  }
+
+  private void lastAggreWithMultiFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,9,39,63.0,E,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select last(s0),last(s1),last(s2),last(s3),last(s4)" +
+              " from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," +
+            resultSet.getString(Constant.last(d0s0)) + "," + resultSet
+            .getString(Constant.last(d0s1))
+            + "," + resultSet.getString(Constant.last(d0s2)) + "," +
+            resultSet.getString(Constant.last(d0s3)) + "," + resultSet
+            .getString(Constant.last(d0s4));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void lastAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,9,39,63.0"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
last(s0),last(s1),last(s2)" +
+          " from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," +
+            resultSet.getString(Constant.last(d0s0)) + ","
+            + resultSet.getString(Constant.last(d0s1)) + "," +
+            resultSet.getString(Constant.last(d0s2));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void sumAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,55061.0,156752.0,20254"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
sum(s0),sum(s1),sum(s2)" +
+          " from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(sum(d0s0)) + ","
+            + resultSet.getString(sum(d0s1)) + "," + Math
+            .round(resultSet.getDouble(Constant.sum(d0s2)));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void firstAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,90,1101,2.22,ddddd,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
first(s0),first(s1),first(s2),first(s3),"
+          + "first(s4) from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," +
+            resultSet.getString(Constant.first(d0s0)) + ","
+            + resultSet.getString(Constant.first(d0s1)) + "," +
+            resultSet.getString(Constant.first(d0s2))
+            + "," + resultSet.getString(Constant.first(d0s3)) + "," +
+            resultSet.getString(Constant.first(d0s4));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void meanAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,75,212,28"
+    };
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select mean(s0),mean(s1),mean(s2) from root.vehicle.d0 where s1 >= 
0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans =
+            resultSet.getString(TIMESTAMP_STR) + "," + 
Math.round(resultSet.getDouble(mean(d0s0)))
+                + "," + Math.round(resultSet.getDouble(mean(d0s1))) + "," +
+                Math.round(resultSet.getDouble(mean(d0s2)));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void countAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,733,740,734"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select count(s0),count(s1),count(s2) from root.vehicle.d0 where s1 
>= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0))
+            + "," + resultSet.getString(count(d0s1)) + "," + 
resultSet.getString(count(d0s2));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void minMaxTimeAggreWithSingleFilterTest() throws SQLException {
+    String[] retArray = new String[]{
+        "0,104,1,2,101,100"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select 
min_time(s0),min_time(s1),min_time(s2),min_time(s3),min_time(s4)" +
+              " from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," +
+            resultSet.getString(Constant.min_time(d0s0)) + "," +
+            resultSet.getString(Constant.min_time(d0s1)) + "," +
+            resultSet.getString(Constant.min_time(d0s2)) +
+            "," + resultSet.getString(Constant.min_time(d0s3)) +
+            "," + resultSet.getString(Constant.min_time(d0s4));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+
+      retArray = new String[]{
+          "0,3999,3999,3999,3599,100"
+      };
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select 
max_time(s0),max_time(s1),max_time(s2),"
+          + "max_time(s3),max_time(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+      Assert.assertTrue(hasResultSet);
+      resultSet = statement.getResultSet();
+      cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_time(d0s0))
+            + "," + resultSet.getString(max_time(d0s1)) + "," + 
resultSet.getString(max_time(d0s2))
+            + "," + resultSet.getString(max_time(d0s3)) + "," + 
resultSet.getString(max_time(d0s4));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void minValueAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,0,0,0.0,B,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", 
"root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
min_value(s0),min_value(s1),min_value(s2),"
+          + "min_value(s3),min_value(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+
+      if (hasResultSet) {
+        ResultSet resultSet = statement.getResultSet();
+        int cnt = 0;
+        while (resultSet.next()) {
+          String ans =
+              resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(min_value(d0s0))
+                  + "," + resultSet.getString(min_value(d0s1)) + "," + 
resultSet
+                  .getString(min_value(d0s2))
+                  + "," + resultSet.getString(min_value(d0s3)) + "," + 
resultSet
+                  .getString(min_value(d0s4));
+          //System.out.println("============ " + ans);
+          Assert.assertEquals(ans, retArray[cnt]);
+          cnt++;
+        }
+        Assert.assertEquals(1, cnt);
+      }
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void maxValueAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,99,40000,122.0,fffff,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
max_value(s0),max_value(s1),max_value(s2),"
+          + "max_value(s3),max_value(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+
+      if (hasResultSet) {
+        ResultSet resultSet = statement.getResultSet();
+        int cnt = 0;
+        while (resultSet.next()) {
+          String ans =
+              resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_value(d0s0))
+                  + "," + resultSet.getString(max_value(d0s1)) + "," + 
resultSet
+                  .getString(max_value(d0s2))
+                  + "," + resultSet.getString(max_value(d0s3)) + "," + 
resultSet
+                  .getString(max_value(d0s4));
+          //System.out.println("============ " + ans);
+          Assert.assertEquals(ans, retArray[cnt]);
+          cnt++;
+        }
+        Assert.assertEquals(1, cnt);
+      }
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void meanAggreWithMultiFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,55061.0,733,75,212,28"
+    };
+
+    try(Connection connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root")){
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
sum(s0),count(s0),mean(s0),mean(s1),"
+          + "mean(s2) from root.vehicle.d0 " +
+          "where s1 >= 0 or s2 < 10");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans =
+            resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(sum(d0s0)) + "," +
+                resultSet.getString(count(d0s0)) + "," + 
Math.round(resultSet.getDouble(mean(d0s0)))
+                + "," +
+                Math.round(resultSet.getDouble(mean(d0s1))) + "," + Math
+                .round(resultSet.getDouble(mean(d0s2)));
+        System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  private void sumAggreWithMultiFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,55061.0,156752.0,20262"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select sum(s0),sum(s1),sum(s2) 
from root.vehicle.d0"
+          + " where s1 >= 0 or s2 < 10");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(sum(d0s0))
+            + "," + resultSet.getString(sum(d0s1)) + "," + Math
+            .round(resultSet.getDouble(sum(d0s2)));
+        //String ans = resultSet.getString(sum(d0s3));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void firstAggreWithMultiFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,90,1101,2.22,ddddd,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
first(s0),first(s1),first(s2),first(s3),"
+          + "first(s4) from root.vehicle.d0 where s1 >= 0 or s2 < 10");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(first(d0s0))
+            + "," + resultSet.getString(first(d0s1)) + "," + 
resultSet.getString(first(d0s2))
+            + "," + resultSet.getString(first(d0s3)) + "," + 
resultSet.getString(first(d0s4));
+        //String ans = resultSet.getString(first(d0s3));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void countAggreWithMultiFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,733,740,736,482,1"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
count(s0),count(s1),count(s2),count(s3),"
+          + "count(s4) from root.vehicle.d0 where s1 >= 0 or s2 < 10");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0))
+            + "," + resultSet.getString(count(d0s1)) + "," + 
resultSet.getString(count(d0s2))
+            + "," + resultSet.getString(count(d0s3)) + "," + 
resultSet.getString(count(d0s4));
+        //String ans = resultSet.getString(count(d0s3));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void minTimeAggreWithMultiFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,104,1,2,101,100"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
min_time(s0),min_time(s1),min_time(s2),"
+          + "min_time(s3),min_time(s4) from root.vehicle.d0 where s1 >= 0");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," +
+            resultSet.getString(Constant.min_time(d0s0)) + "," +
+            resultSet.getString(Constant.min_time(d0s1)) + "," +
+            resultSet.getString(Constant.min_time(d0s2)) + "," +
+            resultSet.getString(Constant.min_time(d0s3)) + "," +
+            resultSet.getString(Constant.min_time(d0s4));
+        // System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void maxTimeAggreWithMultiFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,3999,3999,3999,3599,100"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
max_time(s0),max_time(s1),max_time(s2),"
+          + "max_time(s3),max_time(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_time(d0s0))
+            + "," + resultSet.getString(max_time(d0s1)) + "," + 
resultSet.getString(max_time(d0s2))
+            + "," + resultSet.getString(max_time(d0s3)) + "," + 
resultSet.getString(max_time(d0s4));
+        //System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void minValueAggreWithMultiFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,0,0,0.0,B,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
min_value(s0),min_value(s1),min_value(s2),"
+          + "min_value(s3),min_value(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(min_value(d0s0))
+            + "," + resultSet.getString(min_value(d0s1)) + "," + resultSet
+            .getString(min_value(d0s2))
+            + "," + resultSet.getString(min_value(d0s3)) + "," + resultSet
+            .getString(min_value(d0s4));
+        //System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private void maxValueAggreWithMultiFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,99,40000,122.0,fffff,true"
+    };
+
+    Connection connection = null;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
max_value(s0),max_value(s1),max_value(s2),"
+          + "max_value(s3),max_value(s4) from root.vehicle.d0 where s1 < 50000 
and s1 != 100");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_value(d0s0))
+            + "," + resultSet.getString(max_value(d0s1)) + "," + resultSet
+            .getString(max_value(d0s2))
+            + "," + resultSet.getString(max_value(d0s3)) + "," + resultSet
+            .getString(max_value(d0s4));
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+
+  private static String[] stringValue = new String[]{"A", "B", "C", "D", "E"};
+
+  private static void insertSQL() throws SQLException {
+    Connection connection = null;
+    double d0s0sum = 0.0, d0s1sum = 0.0, d0s2sum = 0.0;
+    int cnt = 0;
+    try {
+      connection = DriverManager.
+          getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+      Statement statement = connection.createStatement();
+      for (String sql : createSql) {
+        statement.execute(sql);
+      }
+
+      // insert large amount of data
+      for (int time = 3000; time < 3600; time++) {
+        if (time % 5 == 0) {
+          continue;
+        }
+
+        String sql = String.format("insert into root.vehicle.d0(timestamp,s0) 
values(%s,%s)",
+            time, time % 100);
+        statement.execute(sql);
+        sql = String.format("insert into root.vehicle.d0(timestamp,s1) 
values(%s,%s)",
+            time, time % 17);
+        statement.execute(sql);
+        sql = String.format("insert into root.vehicle.d0(timestamp,s2) 
values(%s,%s)",
+            time, time % 22);
+        statement.execute(sql);
+        sql = String.format("insert into root.vehicle.d0(timestamp,s3) 
values(%s,'%s')",
+            time, stringValue[time % 5]);
+        statement.execute(sql);
+        cnt++;
+        d0s0sum += time % 100;
+        d0s1sum += time % 17;
+        d0s2sum += time % 22;
+      }
+
+      statement.execute("flush");
+      System.out.println("cnt = " + cnt);
+
+      // insert large amount of data
+      for (int time = 3700; time < 4000; time++) {
+        if (time % 6 == 0) {
+          continue;
+        }
+
+        String sql = String.format("insert into root.vehicle.d0(timestamp,s0) 
values(%s,%s)",
+            time, time % 70);
+        statement.execute(sql);
+        sql = String.format("insert into root.vehicle.d0(timestamp,s1) 
values(%s,%s)",
+            time, time % 40);
+        statement.execute(sql);
+        sql = String.format("insert into root.vehicle.d0(timestamp,s2) 
values(%s,%s)",
+            time, time % 123);
+        statement.execute(sql);
+
+        cnt++;
+        d0s0sum += time % 70;
+        d0s1sum += time % 40;
+        d0s2sum += time % 123;
+      }
+
+      statement.execute("merge");
+
+      System.out.println("large insert cnt = " + cnt);
+      System.out
+          .println("d0s0sum = " + d0s0sum + "; d0s1sum = " + d0s1sum + "; 
d0s2sum = " + d0s2sum);
+      for (String sql : insertSql) {
+        statement.execute(sql);
+      }
+
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    } finally {
+      if (connection != null) {
+        connection.close();
+      }
+    }
+  }
+}
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationSmallDataIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationSmallDataIT.java
new file mode 100644
index 0000000..02dc01f
--- /dev/null
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBAggregationSmallDataIT.java
@@ -0,0 +1,760 @@
+/**
+ * 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.cluster.integration;
+
+import static org.apache.iotdb.cluster.integration.Constant.count;
+import static org.apache.iotdb.cluster.integration.Constant.first;
+import static org.apache.iotdb.cluster.integration.Constant.last;
+import static org.apache.iotdb.cluster.integration.Constant.max_time;
+import static org.apache.iotdb.cluster.integration.Constant.max_value;
+import static org.apache.iotdb.cluster.integration.Constant.mean;
+import static org.apache.iotdb.cluster.integration.Constant.min_time;
+import static org.apache.iotdb.cluster.integration.Constant.min_value;
+import static org.apache.iotdb.cluster.integration.Constant.sum;
+import static org.apache.iotdb.cluster.utils.Utils.insertData;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import org.apache.iotdb.cluster.config.ClusterConfig;
+import org.apache.iotdb.cluster.config.ClusterDescriptor;
+import org.apache.iotdb.cluster.entity.Server;
+import org.apache.iotdb.cluster.utils.EnvironmentUtils;
+import org.apache.iotdb.cluster.utils.QPExecutorUtils;
+import org.apache.iotdb.cluster.utils.hash.PhysicalNode;
+import org.apache.iotdb.jdbc.Config;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Multiple aggregation with filter test.
+ */
+public class IoTDBAggregationSmallDataIT {
+
+  private Server server;
+  private static final ClusterConfig CLUSTER_CONFIG = 
ClusterDescriptor.getInstance().getConfig();
+  private static final PhysicalNode localNode = new 
PhysicalNode(CLUSTER_CONFIG.getIp(),
+      CLUSTER_CONFIG.getPort());
+
+  private static final String TIMESTAMP_STR = "Time";
+  private final String d0s0 = "root.vehicle.d0.s0";
+  private final String d0s1 = "root.vehicle.d0.s1";
+  private final String d0s2 = "root.vehicle.d0.s2";
+  private final String d0s3 = "root.vehicle.d0.s3";
+  private final String d0s4 = "root.vehicle.d0.s4";
+  private final String d1s0 = "root.vehicle.d1.s0";
+  private final String d1s1 = "root.vehicle.d1.s1";
+
+  private static String[] createSqls = new String[]{
+      "SET STORAGE GROUP TO root.vehicle",
+      "CREATE TIMESERIES root.vehicle.d1.s0 WITH DATATYPE=INT32, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d1.s1 WITH DATATYPE=INT64, ENCODING=RLE",
+
+      "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
+      "CREATE TIMESERIES root.vehicle.d0.s3 WITH DATATYPE=TEXT, 
ENCODING=PLAIN",
+      "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN, 
ENCODING=PLAIN"};
+  private static String[] insertSqls = new String[]{
+
+      "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
+      "insert into root.vehicle.d0(timestamp,s0) values(2,198)",
+      "insert into root.vehicle.d0(timestamp,s0) values(100,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(101,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(102,80)",
+      "insert into root.vehicle.d0(timestamp,s0) values(103,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(104,90)",
+      "insert into root.vehicle.d0(timestamp,s0) values(105,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(106,99)",
+      "insert into root.vehicle.d0(timestamp,s0) values(2,10000)",
+      "insert into root.vehicle.d0(timestamp,s0) values(50,10000)",
+      "insert into root.vehicle.d0(timestamp,s0) values(1000,22222)",
+      "insert into root.vehicle.d0(timestamp,s0) values(106,199)",
+      "DELETE FROM root.vehicle.d0.s0 WHERE time < 104",
+
+      "insert into root.vehicle.d0(timestamp,s1) values(1,1101)",
+      "insert into root.vehicle.d0(timestamp,s1) values(2,198)",
+      "insert into root.vehicle.d0(timestamp,s1) values(100,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(101,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(102,180)",
+      "insert into root.vehicle.d0(timestamp,s1) values(103,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(104,190)",
+      "insert into root.vehicle.d0(timestamp,s1) values(105,199)",
+      "insert into root.vehicle.d0(timestamp,s1) values(2,40000)",
+      "insert into root.vehicle.d0(timestamp,s1) values(50,50000)",
+      "insert into root.vehicle.d0(timestamp,s1) values(1000,55555)",
+
+      "insert into root.vehicle.d0(timestamp,s2) values(1000,55555)",
+      "insert into root.vehicle.d0(timestamp,s2) values(2,2.22)",
+      "insert into root.vehicle.d0(timestamp,s2) values(3,3.33)",
+      "insert into root.vehicle.d0(timestamp,s2) values(4,4.44)",
+      "insert into root.vehicle.d0(timestamp,s2) values(102,10.00)",
+      "insert into root.vehicle.d0(timestamp,s2) values(105,11.11)",
+      "insert into root.vehicle.d0(timestamp,s2) values(1000,1000.11)",
+
+      "insert into root.vehicle.d0(timestamp,s3) values(60,'aaaaa')",
+      "insert into root.vehicle.d0(timestamp,s3) values(70,'bbbbb')",
+      "insert into root.vehicle.d0(timestamp,s3) values(80,'ccccc')",
+      "insert into root.vehicle.d0(timestamp,s3) values(101,'ddddd')",
+      "insert into root.vehicle.d0(timestamp,s3) values(102,'fffff')",
+
+      "insert into root.vehicle.d1(timestamp,s0) values(1,999)",
+      "insert into root.vehicle.d1(timestamp,s0) values(1000,888)",
+
+      "insert into root.vehicle.d0(timestamp,s1) 
values(2000-01-01T08:00:00+08:00, 100)",
+      "insert into root.vehicle.d0(timestamp,s3) 
values(2000-01-01T08:00:00+08:00, 'good')",
+
+      "insert into root.vehicle.d0(timestamp,s4) values(100, false)",
+      "insert into root.vehicle.d0(timestamp,s4) values(100, true)"
+  };
+
+  @Before
+  public void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.closeMemControl();
+    CLUSTER_CONFIG.createAllPath();
+    server = Server.getInstance();
+    server.start();
+    EnvironmentUtils.envSetUp();
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    insertSQL();
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    server.stop();
+    QPExecutorUtils.setLocalNodeAddr(localNode.getIp(), localNode.getPort());
+    EnvironmentUtils.cleanEnv();
+  }
+
+  @Test
+  public void countOnlyTimeFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,3,7,4,5,1"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select count(s0),count(s1),count(s2),count(s3),count(s4) " +
+              "from root.vehicle.d0 where time >= 3 and time <= 106");
+
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0))
+            + "," + resultSet.getString(count(d0s1)) + "," + 
resultSet.getString(count(d0s2))
+            + "," + resultSet.getString(count(d0s3)) + "," + 
resultSet.getString(count(d0s4));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void countOnlyTimeFilterRemoteTest() throws ClassNotFoundException, 
SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    countOnlyTimeFilterTest();
+  }
+
+  @Test
+  public void functionsNoFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,4,0,6,1",
+        "0,22222,null,good",
+        "0,90,null,aaaaa",
+        "0,22222,null,good",
+        "0,22610.0,0.0"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+
+      //select count(d0.s0),count(d1.s1),count(d0.s3),count(d0.s4) from 
root.vehicle
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select count(d0.s0),count(d1.s1),count(d0.s3),count(d0.s4) from 
root.vehicle");
+
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0))
+            + "," + resultSet.getString(count(d1s1)) + "," + 
resultSet.getString(count(d0s3))
+            + "," + resultSet.getString(count(d0s4));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+
+      //select max_value(d0.s0),max_value(d1.s1),max_value(d0.s3) from 
root.vehicle
+      statement = connection.createStatement();
+      hasResultSet = statement.execute(
+          "select max_value(d0.s0),max_value(d1.s1),max_value(d0.s3) from 
root.vehicle");
+      resultSet = statement.getResultSet();
+      Assert.assertTrue(hasResultSet);
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_value(d0s0))
+            + "," + resultSet.getString(max_value(d1s1)) + ","
+            + resultSet.getString(max_value(d0s3));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(2, cnt);
+      statement.close();
+
+      //select first(d0.s0),first(d1.s1),first(d0.s3) from root.vehicle
+      statement = connection.createStatement();
+      hasResultSet = statement.execute(
+          "select first(d0.s0),first(d1.s1),first(d0.s3) from root.vehicle");
+      resultSet = statement.getResultSet();
+      Assert.assertTrue(hasResultSet);
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(first(d0s0))
+            + "," + resultSet.getString(first(d1s1)) + "," + 
resultSet.getString(first(d0s3));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(3, cnt);
+      statement.close();
+
+      //select last(d0.s0),last(d1.s1),last(d0.s3) from root.vehicle
+      statement = connection.createStatement();
+      hasResultSet = statement.execute(
+          "select last(d0.s0),last(d1.s1),last(d0.s3) from root.vehicle");
+      resultSet = statement.getResultSet();
+      Assert.assertTrue(hasResultSet);
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(last(d0s0))
+            + "," + resultSet.getString(last(d1s1)) + "," + 
resultSet.getString(last(d0s3));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(4, cnt);
+      statement.close();
+
+      //select sum(d0.s0),sum(d1.s1),sum(d0.s3) from root.vehicle
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select sum(d0.s0),sum(d1.s1) from 
root.vehicle");
+      resultSet = statement.getResultSet();
+      Assert.assertTrue(hasResultSet);
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(sum(d0s0))
+            + "," + resultSet.getString(sum(d1s1));
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(5, cnt);
+      statement.close();
+
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void functionsNoFilterRemoteTest() throws ClassNotFoundException, 
SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    functionsNoFilterTest();
+  }
+
+  @Test
+  public void lastAggreWithSingleFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,22222,55555"
+    };
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select last(s0),last(s1) from root.vehicle.d0 where s2 >= 3.33");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans =
+            resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(last(d0s0)) + ","
+                + resultSet.getString(last(d0s1));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void lastAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    lastAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void firstAggreWithSingleFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,99,180"
+    };
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select first(s0),first(s1) from root.vehicle.d0 where s2 >= 3.33");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans =
+            resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(first(d0s0)) + ","
+                + resultSet.getString(first(d0s1));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void firstAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    firstAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void sumAggreWithSingleFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,22321.0,55934.0,1029"
+    };
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select sum(s0),sum(s1),sum(s2) from root.vehicle.d0 where s2 >= 
3.33");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(sum(d0s0))
+            + "," + resultSet.getString(sum(d0s1)) + "," + Math
+            .round(resultSet.getDouble(sum(d0s2)));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void sumAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    sumAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void meanAggreWithSingleFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,11160.5,18645,206"
+    };
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select mean(s0),mean(s1),mean(s2) from root.vehicle.d0 where s2 >= 
3.33");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(mean(d0s0))
+            + "," + Math.round(resultSet.getDouble(mean(d0s1))) + ","
+            + Math.round(resultSet.getDouble(mean(d0s2)));
+        //System.out.println("!!!!!============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void meanAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    meanAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void countAggreWithSingleFilterTest() throws ClassNotFoundException, 
SQLException {
+    String[] retArray = new String[]{
+        "0,2,3,5,1,0"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
count(s0),count(s1),count(s2),count(s3),"
+          + "count(s4) from root.vehicle.d0 where s2 >= 3.33");
+      // System.out.println(hasResultSet + "...");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0))
+            + "," + resultSet.getString(count(d0s1)) + "," + 
resultSet.getString(count(d0s2))
+            + "," + resultSet.getString(count(d0s3)) + "," + 
resultSet.getString(count(d0s4));
+        // System.out.println("============ " + ans);
+        Assert.assertEquals(retArray[cnt], ans);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void countAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    countAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void minTimeAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,104,1,2,101,100"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
min_time(s0),min_time(s1),min_time(s2)"
+          + ",min_time(s3),min_time(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(min_time(d0s0))
+            + "," + resultSet.getString(min_time(d0s1)) + "," + 
resultSet.getString(min_time(d0s2))
+            + "," + resultSet.getString(min_time(d0s3)) + "," + 
resultSet.getString(min_time(d0s4));
+        // System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+        Assert.assertEquals(1, cnt);
+      }
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void minTimeAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    minTimeAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void maxTimeAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,105,105,105,102,100"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
max_time(s0),max_time(s1),max_time(s2)"
+          + ",max_time(s3),max_time(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_time(d0s0))
+            + "," + resultSet.getString(max_time(d0s1)) + "," + 
resultSet.getString(max_time(d0s2))
+            + "," + resultSet.getString(max_time(d0s3)) + "," + 
resultSet.getString(max_time(d0s4));
+        // System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void maxTimeAggreWithSingleFilterRemoteTest() throws 
ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    maxTimeAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void minValueAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,90,180,2.22,ddddd,true"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
min_value(s0),min_value(s1),min_value(s2)"
+          + ",min_value(s3),min_value(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+      Assert.assertTrue(hasResultSet);
+
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(min_value(d0s0))
+            + "," + resultSet.getString(min_value(d0s1)) +
+            "," + resultSet.getString(min_value(d0s2))
+            + "," + resultSet.getString(min_value(d0s3)) + ","
+            + resultSet.getString(min_value(d0s4));
+        // System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void minValueAggreWithSingleFilterRemoteTest()
+      throws ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    minValueAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void maxValueAggreWithSingleFilterTest() throws 
ClassNotFoundException, SQLException {
+    String[] retArray = new String[]{
+        "0,99,50000,11.11,fffff,true"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select 
max_value(s0),max_value(s1),max_value(s2),"
+          + "max_value(s3),max_value(s4) from root.vehicle.d0 " +
+          "where s1 < 50000 and s1 != 100");
+
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(max_value(d0s0))
+            + "," + resultSet.getString(max_value(d0s1)) + "," + resultSet
+            .getString(max_value(d0s2))
+            + "," + resultSet.getString(max_value(d0s3)) + "," + resultSet
+            .getString(max_value(d0s4));
+        //System.out.println("============ " + ans);
+        //Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void maxValueAggreWithSingleFilterRemoteTest()
+      throws ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    maxValueAggreWithSingleFilterTest();
+  }
+
+  @Test
+  public void countAggreWithMultiMultiFilterTest() {
+    String[] retArray = new String[]{
+        "0,2",
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute(
+          "select count(s0) from root.vehicle.d0 where s2 >= 3.33");
+      // System.out.println(hasResultSet + "...");
+      Assert.assertTrue(hasResultSet);
+      ResultSet resultSet = statement.getResultSet();
+      int cnt = 0;
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(count(d0s0));
+        //System.out.println("============ " + ans);
+        Assert.assertEquals(ans, retArray[cnt]);
+        cnt++;
+      }
+      Assert.assertEquals(1, cnt);
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void countAggreWithMultiMultiFilterRemoteTest()
+      throws ClassNotFoundException, SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    countAggreWithMultiMultiFilterTest();
+  }
+
+  @Test
+  public void selectAllSQLTest() throws ClassNotFoundException, SQLException {
+    //d0s0,d0s1,d0s2,d0s3,d1s0
+    String[] retArray = new String[]{
+        "1,null,1101,null,null,999",
+        "2,null,40000,2.22,null,null",
+        "3,null,null,3.33,null,null",
+        "4,null,null,4.44,null,null",
+        "50,null,50000,null,null,null",
+        "60,null,null,null,aaaaa,null",
+        "70,null,null,null,bbbbb,null",
+        "80,null,null,null,ccccc,null",
+        "100,null,199,null,null,null",
+        "101,null,199,null,ddddd,null",
+        "102,null,180,10.0,fffff,null",
+        "103,null,199,null,null,null",
+        "104,90,190,null,null,null",
+        "105,99,199,11.11,null,null",
+        "106,199,null,null,null,null",
+        "1000,22222,55555,1000.11,null,888",
+        "946684800000,null,100,null,good,null"
+    };
+
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      Statement statement = connection.createStatement();
+      boolean hasResultSet = statement.execute("select * from root");
+      // System.out.println(hasResultSet + "...");
+      if (hasResultSet) {
+        ResultSet resultSet = statement.getResultSet();
+        int cnt = 0;
+        while (resultSet.next()) {
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(d0s0) + ","
+              + resultSet.getString(d0s1) + "," + resultSet.getString(d0s2) + 
"," +
+              resultSet.getString(d0s3) + "," + resultSet.getString(d1s0);
+          // System.out.println(ans);
+          Assert.assertEquals(ans, retArray[cnt]);
+          cnt++;
+        }
+        Assert.assertEquals(17, cnt);
+      }
+      statement.close();
+
+      retArray = new String[]{
+          "100,true"
+      };
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select s4 from root.vehicle.d0");
+      if (hasResultSet) {
+        ResultSet resultSet = statement.getResultSet();
+        int cnt = 0;
+        while (resultSet.next()) {
+          String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(d0s4);
+          Assert.assertEquals(ans, retArray[cnt]);
+          cnt++;
+        }
+        Assert.assertEquals(1, cnt);
+      }
+      statement.close();
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  @Ignore
+  public void selectAllSQLRemoteTest() throws ClassNotFoundException, 
SQLException {
+    QPExecutorUtils.setLocalNodeAddr("0.0.0.0", 0);
+    selectAllSQLTest();
+  }
+
+  private static void insertSQL() {
+    try (Connection connection = DriverManager.getConnection
+        (Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root")) {
+      insertData(connection, createSqls, insertSqls);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+}
+
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBFillQueryIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBFillQueryIT.java
index ba8746d..f78c39a 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBFillQueryIT.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBFillQueryIT.java
@@ -110,7 +110,6 @@ public class IoTDBFillQueryIT {
 
   @Before
   public void setUp() throws Exception {
-    EnvironmentUtils.cleanEnv();
     EnvironmentUtils.closeStatMonitor();
     EnvironmentUtils.closeMemControl();
     CLUSTER_CONFIG.createAllPath();
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBMetadataFetchLocallyIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBMetadataFetchLocallyIT.java
index a007582..f662307 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBMetadataFetchLocallyIT.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBMetadataFetchLocallyIT.java
@@ -37,7 +37,6 @@ public class IoTDBMetadataFetchLocallyIT extends 
IoTDBMetadataFetchAbstract{
 
   @Before
   public void setUp() throws Exception {
-    EnvironmentUtils.cleanEnv();
     EnvironmentUtils.closeStatMonitor();
     EnvironmentUtils.closeMemControl();
     config.createAllPath();
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryIT.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryIT.java
index 90d4474..5be3cbc 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryIT.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryIT.java
@@ -126,7 +126,6 @@ public class IoTDBQueryIT {
 
   @Before
   public void setUp() throws Exception {
-    EnvironmentUtils.cleanEnv();
     EnvironmentUtils.closeStatMonitor();
     EnvironmentUtils.closeMemControl();
     CLUSTER_CONFIG.createAllPath();
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryLargeDataIT.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryLargeDataIT.java
index 926d8a7..b40de2d 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryLargeDataIT.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/integration/IoTDBQueryLargeDataIT.java
@@ -43,7 +43,6 @@ import org.junit.Test;
 
 public class IoTDBQueryLargeDataIT {
 
-
   private Server server;
   private static final ClusterConfig CLUSTER_CONFIG = 
ClusterDescriptor.getInstance().getConfig();
   private static final PhysicalNode localNode = new 
PhysicalNode(CLUSTER_CONFIG.getIp(),
@@ -176,7 +175,6 @@ public class IoTDBQueryLargeDataIT {
 
   @Before
   public void setUp() throws Exception {
-    EnvironmentUtils.cleanEnv();
     EnvironmentUtils.closeStatMonitor();
     EnvironmentUtils.closeMemControl();
     CLUSTER_CONFIG.createAllPath();
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/utils/RaftUtilsTest.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/utils/RaftUtilsTest.java
index e7a4201..787bf47 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/utils/RaftUtilsTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/utils/RaftUtilsTest.java
@@ -60,15 +60,16 @@ public class RaftUtilsTest {
 
   private ClusterConfig config = ClusterDescriptor.getInstance().getConfig();
   private String[] ipListOld;
+  private int portOld;
   private int replicatorOld;
   private int numOfVirtualNodesOld;
-  private int PORT = 7777;
+  private int port = 7777;
   private String[] ipList = {
-      "192.168.130.4:" + PORT,
-      "192.168.130.5:" + PORT,
-      "192.168.130.2:" + PORT,
-      "192.168.130.1:" + PORT,
-      "192.168.130.3:" + PORT
+      "192.168.130.4:" + port,
+      "192.168.130.5:" + port,
+      "192.168.130.2:" + port,
+      "192.168.130.1:" + port,
+      "192.168.130.3:" + port
   };
   private int replicator = 3;
 
@@ -124,11 +125,12 @@ public class RaftUtilsTest {
     Mockito.doNothing().when(response).addResult(any(boolean.class));
     Mockito.doNothing().when(response).setErrorMsg(any(String.class));
     ipListOld = config.getNodes();
+    portOld = config.getPort();
     replicatorOld = config.getReplication();
     numOfVirtualNodesOld = config.getNumOfVirtualNodes();
 
     int numOfVirtualNodes = 2;
-    config.setPort(PORT);
+    config.setPort(port);
     config.setNodes(ipList);
     config.setReplication(replicator);
     config.setNumOfVirtualNodes(numOfVirtualNodes);
@@ -138,8 +140,9 @@ public class RaftUtilsTest {
   }
 
   @After
-  public void tearDown() throws Exception {
+  public void tearDown() {
     peerIds.clear();
+    config.setPort(portOld);
     config.setNodes(ipListOld);
     config.setReplication(replicatorOld);
     config.setNumOfVirtualNodes(numOfVirtualNodesOld);
diff --git a/cluster/src/test/java/org/apache/iotdb/cluster/utils/Utils.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/utils/Utils.java
index f080a9d..0bb3c08 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/utils/Utils.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/utils/Utils.java
@@ -26,6 +26,11 @@ import java.sql.SQLException;
 import java.sql.Statement;
 
 public class Utils {
+
+  private Utils() {
+
+  }
+
   public static String getCurrentPath(String... command) throws IOException {
     ProcessBuilder builder = new ProcessBuilder(command);
     builder.redirectErrorStream(true);
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
index 516abdc..1abc553 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
@@ -551,6 +551,9 @@ public class FileNodeManager implements IStatistic, 
IService {
         try {
           fileNodeProcessor.delete(deviceId, measurementId, timestamp);
         } catch (IOException e) {
+          System.out.println(deviceId);
+          System.out.println(measurementId);
+          System.out.println(timestamp);
           throw new FileNodeManagerException(e);
         }
         // change the type of tsfile to overflowed

Reply via email to