You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/11/19 09:15:49 UTC

[iotdb] 01/03: add value filter test

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

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

commit 6370cac1dd179a83d59aaf0295b54e6da59db7c6
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Fri Nov 19 16:08:06 2021 +0800

    add value filter test
---
 .../aligned/IoTDBRawQueryWithValueFilter2IT.java   |  64 ++
 .../aligned/IoTDBRawQueryWithValueFilterIT.java    | 739 ++++++++++++++++++++
 ...oTDBRawQueryWithValueFilterWithDeletion2IT.java |  79 +++
 ...IoTDBRawQueryWithValueFilterWithDeletionIT.java | 774 +++++++++++++++++++++
 4 files changed, 1656 insertions(+)

diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java
new file mode 100644
index 0000000..4ebaf2f
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.integration.aligned;
+
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+public class IoTDBRawQueryWithValueFilter2IT extends IoTDBRawQueryWithValueFilterIT {
+
+
+  private static int numOfPointsPerPage;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+    // TODO When the aligned time series support compaction, we need to set compaction to true
+    enableSeqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction();
+    enableUnseqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction();
+    enableCrossSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction();
+    numOfPointsPerPage = TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage();
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(3);
+    AlignedWriteUtil.insertData();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction);
+    TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage);
+    EnvironmentUtils.cleanEnv();
+  }
+
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java
new file mode 100644
index 0000000..9d0e7c6
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java
@@ -0,0 +1,739 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.integration.aligned;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.jdbc.Config;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class IoTDBRawQueryWithValueFilterIT {
+  protected static boolean enableSeqSpaceCompaction;
+  protected static boolean enableUnseqSpaceCompaction;
+  protected static boolean enableCrossSpaceCompaction;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+    // TODO When the aligned time series support compaction, we need to set compaction to true
+    enableSeqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction();
+    enableUnseqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction();
+    enableCrossSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction();
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    AlignedWriteUtil.insertData();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction);
+    EnvironmentUtils.cleanEnv();
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "1,1.0,1,1,true,aligned_test1",
+            "3,30000.0,null,30000,true,aligned_unseq_test3",
+            "4,4.0,4,null,true,aligned_test4",
+            "5,5.0,5,null,true,aligned_test5",
+            "6,6.0,6,6,true,null",
+            "10,null,10,10,true,aligned_test10",
+            "13,130000.0,130000,130000,true,aligned_unseq_test13",
+            "21,null,null,21,true,null",
+            "22,null,null,22,true,null",
+            "24,null,null,24,true,null",
+            "25,null,null,25,true,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s4 = true");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "12,12.0,12,12,null,null",
+            "14,14.0,14,14,null,null",
+            "15,15.0,15,15,null,null",
+            "16,16.0,16,16,null,null",
+            "17,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null",
+            "19,19.0,19,19,null,null",
+            "20,20.0,20,20,null,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s1 > 11 and s2 <= 33");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest3() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "1,1.0,1,1,true,aligned_test1",
+            "2,2.0,2,2,null,aligned_test2",
+            "3,30000.0,null,30000,true,aligned_unseq_test3",
+            "4,4.0,4,null,true,aligned_test4",
+            "5,5.0,5,null,true,aligned_test5",
+            "6,6.0,6,6,true,null",
+            "7,7.0,7,7,false,aligned_test7",
+            "8,8.0,8,8,null,aligned_test8",
+            "9,9.0,9,9,false,aligned_test9",
+            "10,null,10,10,true,aligned_test10",
+            "11,11.0,11,11,null,null",
+            "12,12.0,12,12,null,null",
+            "13,130000.0,130000,130000,true,aligned_unseq_test13",
+            "14,14.0,14,14,null,null",
+            "15,15.0,15,15,null,null",
+            "16,16.0,16,16,null,null",
+            "17,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null",
+            "19,19.0,19,19,null,null",
+            "20,20.0,20,20,null,null",
+            "23,230000.0,null,230000,false,null",
+            "31,null,31,null,null,aligned_test31",
+            "32,null,32,null,null,aligned_test32",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s1 >= 13 or s2 < 33");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedAndNonAlignedTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "13,130000.0,130000,130000,true,aligned_unseq_test13,13.0,13,13,null,null",
+            "17,17.0,17,17,null,null,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null,18.0,18,18,null,null",
+            "19,19.0,19,19,null,null,19.0,19,19,null,null",
+            "20,20.0,20,20,null,null,20.0,20,20,null,null",
+            "23,230000.0,null,230000,false,null,null,null,23,true,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1",
+        "root.sg1.d1.s2",
+        "root.sg1.d1.s3",
+        "root.sg1.d1.s4",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s1",
+        "root.sg1.d2.s2",
+        "root.sg1.d2.s3",
+        "root.sg1.d2.s4",
+        "root.sg1.d2.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.* where root.sg1.d1.s2 > 16 and root.sg1.d2.s3 <= 36");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedAndNonAlignedTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "3,30000.0,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3",
+            "7,7.0,7,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7",
+            "9,9.0,9,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9",
+            "17,17.0,17,17,null,null,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null,18.0,18,18,null,null",
+            "19,19.0,19,19,null,null,19.0,19,19,null,null",
+            "20,20.0,20,20,null,null,20.0,20,20,null,null",
+            "23,230000.0,null,230000,false,null,null,null,23,true,null",
+            "26,null,null,26,false,null,null,null,26,false,null",
+            "27,null,null,27,false,null,null,null,27,false,null",
+            "28,null,null,28,false,null,null,null,28,false,null",
+            "29,null,null,29,false,null,null,null,29,false,null",
+            "30,null,null,30,false,null,null,null,30,false,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1",
+        "root.sg1.d1.s2",
+        "root.sg1.d1.s3",
+        "root.sg1.d1.s4",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s1",
+        "root.sg1.d2.s2",
+        "root.sg1.d2.s3",
+        "root.sg1.d2.s4",
+        "root.sg1.d2.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.* where root.sg1.d1.s2 > 16 or root.sg1.d2.s4 = false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithTimeAndValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "9,9.0,9,9,false,aligned_test9",
+            "11,11.0,11,11,null,null",
+            "12,12.0,12,12,null,null",
+            "14,14.0,14,14,null,null",
+            "15,15.0,15,15,null,null",
+            "16,16.0,16,16,null,null",
+            "17,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where time >= 9 and time <= 33 and s1 < 19");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithTimeAndValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "9,9.0,9,9,false,aligned_test9",
+            "10,null,10,10,true,aligned_test10",
+            "11,11.0,11,11,null,null",
+            "12,12.0,12,12,null,null",
+            "13,130000.0,130000,130000,true,aligned_unseq_test13",
+            "14,14.0,14,14,null,null",
+            "15,15.0,15,15,null,null",
+            "16,16.0,16,16,null,null",
+            "17,17.0,17,17,null,null",
+            "18,18.0,18,18,null,null",
+            "19,19.0,19,19,null,null",
+            "20,20.0,20,20,null,null",
+            "21,null,null,21,true,null",
+            "22,null,null,22,true,null",
+            "23,230000.0,null,230000,false,null",
+            "24,null,null,24,true,null",
+            "25,null,null,25,true,null",
+            "26,null,null,26,false,null",
+            "27,null,null,27,false,null",
+            "28,null,null,28,false,null",
+            "29,null,null,29,false,null",
+            "30,null,null,30,false,null",
+            "31,null,31,null,null,aligned_test31",
+            "32,null,32,null,null,aligned_test32",
+            "33,null,33,null,null,aligned_test33",
+            "36,null,36,null,null,aligned_test36",
+            "37,null,37,null,null,aligned_test37",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1", "root.sg1.d1.s2", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where time >= 9 and time <= 33 or s5 = 'aligned_test36' or s5 = 'aligned_test37'");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "1,1.0,true,aligned_test1",
+            "2,2.0,null,aligned_test2",
+            "4,4.0,true,aligned_test4",
+            "5,5.0,true,aligned_test5",
+            "6,6.0,true,null",
+            "7,7.0,false,aligned_test7",
+            "8,8.0,null,aligned_test8",
+            "9,9.0,false,aligned_test9",
+            "11,11.0,null,null",
+            "12,12.0,null,null",
+            "14,14.0,null,null",
+            "15,15.0,null,null",
+            "16,16.0,null,null",
+            "34,null,null,aligned_test34",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4,s5 from root.sg1.d1 where s1 < 17 or s5 = 'aligned_test34'");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "7,7.0,false",
+            "9,9.0,false",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4 from root.sg1.d1 where s1 < 19 and s4 = false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "23,230000.0,false,null",
+            "26,null,false,null",
+            "27,null,false,null",
+            "28,null,false,null",
+            "29,null,false,null",
+            "30,null,false,null",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4,s5 from root.sg1.d1 where time >= 16 and time <= 34 and s4=false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedAndNonAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+            "18,null,null,18.0,null,null,18.0",
+            "19,null,null,19.0,null,null,19.0",
+            "20,null,null,20.0,null,null,20.0",
+            "21,null,true,null,null,true,null",
+            "22,null,true,null,null,true,null",
+            "23,null,false,null,null,true,230000.0",
+            "24,null,true,null,null,true,null",
+            "25,null,true,null,null,true,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d2.s5",
+        "root.sg1.d1.s4",
+        "root.sg1.d2.s1",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s4",
+        "root.sg1.d1.s1"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+        DriverManager.getConnection(
+            Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+
+      // 1 4 5
+      boolean hasResultSet =
+          statement.execute(
+              "select d2.s5, d1.s4, d2.s1, d1.s5, d2.s4, d1.s1 from root.sg1 where time >= 16 and time <= 34 and (d1.s1 >= 18 or d2.s4 = true)");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java
new file mode 100644
index 0000000..19817e6
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.integration.aligned;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.jdbc.Config;
+import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+public class IoTDBRawQueryWithValueFilterWithDeletion2IT extends IoTDBRawQueryWithValueFilterWithDeletionIT{
+
+  private static int numOfPointsPerPage;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+
+    enableSeqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction();
+    enableUnseqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction();
+    enableCrossSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction();
+    numOfPointsPerPage = TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage();
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(3);
+    AlignedWriteUtil.insertData();
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+        DriverManager.getConnection(
+            Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      // TODO currently aligned data in memory doesn't support deletion, so we flush all data to
+      // disk before doing deletion
+      statement.execute("flush");
+      statement.execute("delete timeseries root.sg1.d1.s2");
+      statement.execute("delete from root.sg1.d1.s1 where time <= 21");
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction);
+    TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(numOfPointsPerPage);
+    EnvironmentUtils.cleanEnv();
+  }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java
new file mode 100644
index 0000000..e81d967
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java
@@ -0,0 +1,774 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.integration.aligned;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.jdbc.Config;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class IoTDBRawQueryWithValueFilterWithDeletionIT {
+
+  protected static boolean enableSeqSpaceCompaction;
+  protected static boolean enableUnseqSpaceCompaction;
+  protected static boolean enableCrossSpaceCompaction;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+
+    enableSeqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableSeqSpaceCompaction();
+    enableUnseqSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableUnseqSpaceCompaction();
+    enableCrossSpaceCompaction =
+        IoTDBDescriptor.getInstance().getConfig().isEnableCrossSpaceCompaction();
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(false);
+
+    AlignedWriteUtil.insertData();
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+        DriverManager.getConnection(
+            Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      // TODO currently aligned data in memory doesn't support deletion, so we flush all data to
+      // disk before doing deletion
+      statement.execute("flush");
+      statement.execute("delete timeseries root.sg1.d1.s2");
+      statement.execute("delete from root.sg1.d1.s1 where time <= 21");
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    IoTDBDescriptor.getInstance().getConfig().setEnableSeqSpaceCompaction(enableSeqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableUnseqSpaceCompaction);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setEnableSeqSpaceCompaction(enableCrossSpaceCompaction);
+    EnvironmentUtils.cleanEnv();
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "1,null,1,true,aligned_test1",
+            "3,null,30000,true,aligned_unseq_test3",
+            "4,null,null,true,aligned_test4",
+            "5,null,null,true,aligned_test5",
+            "6,null,6,true,null",
+            "10,null,10,true,aligned_test10",
+            "13,null,130000,true,aligned_unseq_test13",
+            "21,null,21,true,null",
+            "22,null,22,true,null",
+            "24,null,24,true,null",
+            "25,null,25,true,null",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s4 = true");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "7,null,7,false,aligned_test7",
+            "9,null,9,false,aligned_test9",
+            "26,null,26,false,null",
+            "27,null,27,false,null",
+            "28,null,28,false,null",
+            "29,null,29,false,null",
+            "30,null,30,false,null",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s4 = false and s3 <= 33");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithValueFilterTest3() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "1,null,1,true,aligned_test1",
+            "2,null,2,null,aligned_test2",
+            "6,null,6,true,null",
+            "7,null,7,false,aligned_test7",
+            "8,null,8,null,aligned_test8",
+            "9,null,9,false,aligned_test9",
+            "10,null,10,true,aligned_test10",
+            "11,null,11,null,null",
+            "12,null,12,null,null",
+            "14,null,14,null,null",
+            "15,null,15,null,null",
+            "16,null,16,null,null",
+            "17,null,17,null,null",
+            "18,null,18,null,null",
+            "19,null,19,null,null",
+            "20,null,20,null,null",
+            "21,null,21,true,null",
+            "22,null,22,true,null",
+            "23,230000.0,230000,false,null",
+            "24,null,24,true,null",
+            "25,null,25,true,null",
+            "26,null,26,false,null",
+            "27,null,27,false,null",
+            "28,null,28,false,null",
+            "29,null,29,false,null",
+            "30,null,30,false,null",
+            "40,null,null,null,aligned_test40",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where s5 = 'aligned_test40' or s4 = false or s3 <= 33");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedAndNonAlignedTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "3,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3",
+            "13,null,130000,true,aligned_unseq_test13,13.0,13,13,null,null",
+            "17,null,17,null,null,17.0,17,17,null,null",
+            "18,null,18,null,null,18.0,18,18,null,null",
+            "19,null,19,null,null,19.0,19,19,null,null",
+            "20,null,20,null,null,20.0,20,20,null,null",
+            "21,null,21,true,null,null,null,21,true,null",
+            "22,null,22,true,null,null,null,22,true,null",
+            "23,230000.0,230000,false,null,null,null,23,true,null",
+            "24,null,24,true,null,null,null,24,true,null",
+            "25,null,25,true,null,null,null,25,true,null",
+            "26,null,26,false,null,null,null,26,false,null",
+            "27,null,27,false,null,null,null,27,false,null",
+            "28,null,28,false,null,null,null,28,false,null",
+            "29,null,29,false,null,null,null,29,false,null",
+            "30,null,30,false,null,null,null,30,false,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1",
+        "root.sg1.d1.s3",
+        "root.sg1.d1.s4",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s1",
+        "root.sg1.d2.s2",
+        "root.sg1.d2.s3",
+        "root.sg1.d2.s4",
+        "root.sg1.d2.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.* where root.sg1.d1.s3 > 16 and root.sg1.d2.s3 <= 36");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedAndNonAlignedTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "3,null,30000,true,aligned_unseq_test3,3.0,null,3,false,non_aligned_test3",
+            "7,null,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7",
+            "9,null,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9",
+            "13,null,130000,true,aligned_unseq_test13,13.0,13,13,null,null",
+            "17,null,17,null,null,17.0,17,17,null,null",
+            "18,null,18,null,null,18.0,18,18,null,null",
+            "19,null,19,null,null,19.0,19,19,null,null",
+            "20,null,20,null,null,20.0,20,20,null,null",
+            "21,null,21,true,null,null,null,21,true,null",
+            "22,null,22,true,null,null,null,22,true,null",
+            "23,230000.0,230000,false,null,null,null,23,true,null",
+            "24,null,24,true,null,null,null,24,true,null",
+            "25,null,25,true,null,null,null,25,true,null",
+            "26,null,26,false,null,null,null,26,false,null",
+            "27,null,27,false,null,null,null,27,false,null",
+            "28,null,28,false,null,null,null,28,false,null",
+            "29,null,29,false,null,null,null,29,false,null",
+            "30,null,30,false,null,null,null,30,false,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d1.s1",
+        "root.sg1.d1.s3",
+        "root.sg1.d1.s4",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s1",
+        "root.sg1.d2.s2",
+        "root.sg1.d2.s3",
+        "root.sg1.d2.s4",
+        "root.sg1.d2.s5"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.* where root.sg1.d1.s3 > 16 or root.sg1.d2.s4 = false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithTimeAndValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "9,null,9,false,aligned_test9",
+            "10,null,10,true,aligned_test10",
+            "11,null,11,null,null",
+            "12,null,12,null,null",
+            "14,null,14,null,null",
+            "15,null,15,null,null",
+            "16,null,16,null,null",
+            "17,null,17,null,null",
+            "18,null,18,null,null",
+            "19,null,19,null,null",
+            "20,null,20,null,null",
+            "21,null,21,true,null",
+            "22,null,22,true,null",
+            "24,null,24,true,null",
+            "25,null,25,true,null",
+            "26,null,26,false,null",
+            "27,null,27,false,null",
+            "28,null,28,false,null",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where time >= 9 and time <= 33 and s3 < 29");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectAllAlignedWithTimeAndValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "9,null,9,false,aligned_test9",
+            "10,null,10,true,aligned_test10",
+            "11,null,11,null,null",
+            "12,null,12,null,null",
+            "13,null,130000,true,aligned_unseq_test13",
+            "14,null,14,null,null",
+            "15,null,15,null,null",
+            "16,null,16,null,null",
+            "17,null,17,null,null",
+            "18,null,18,null,null",
+            "19,null,19,null,null",
+            "20,null,20,null,null",
+            "21,null,21,true,null",
+            "22,null,22,true,null",
+            "23,230000.0,230000,false,null",
+            "24,null,24,true,null",
+            "25,null,25,true,null",
+            "26,null,26,false,null",
+            "27,null,27,false,null",
+            "28,null,28,false,null",
+            "29,null,29,false,null",
+            "30,null,30,false,null",
+            "31,null,null,null,aligned_test31",
+            "32,null,null,null,aligned_test32",
+            "33,null,null,null,aligned_test33",
+            "36,null,null,null,aligned_test36",
+            "37,null,null,null,aligned_test37",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s3", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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.sg1.d1 where time >= 9 and time <= 33 or s5 = 'aligned_test36' or s5 = 'aligned_test37'");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "7,null,false,aligned_test7",
+            "9,null,false,aligned_test9",
+            "23,230000.0,false,null",
+            "26,null,false,null",
+            "27,null,false,null",
+            "28,null,false,null",
+            "29,null,false,null",
+            "30,null,false,null",
+            "34,null,null,aligned_test34",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4,s5 from root.sg1.d1 where s4 = false or s5 = 'aligned_test34'");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "23,230000.0,false",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4 from root.sg1.d1 where s1 > 29 and s4 = false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedWithTimeAndValueFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "23,230000.0,false,null",
+            "26,null,false,null",
+            "27,null,false,null",
+            "28,null,false,null",
+            "29,null,false,null",
+            "30,null,false,null",
+        };
+
+    String[] columnNames = {"root.sg1.d1.s1", "root.sg1.d1.s4", "root.sg1.d1.s5"};
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    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 s1,s4,s5 from root.sg1.d1 where time >= 16 and time <= 34 and s4=false");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void selectSomeAlignedAndNonAlignedWithTimeAndValueFilterTest()
+      throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[]{
+            "21,null,true,null,null,true,null",
+            "22,null,true,null,null,true,null",
+            "23,null,false,null,null,true,230000.0",
+            "24,null,true,null,null,true,null",
+            "25,null,true,null,null,true,null",
+            "31,non_aligned_test31,null,null,aligned_test31,null,null",
+            "32,non_aligned_test32,null,null,aligned_test32,null,null",
+            "33,non_aligned_test33,null,null,aligned_test33,null,null",
+            "34,non_aligned_test34,null,null,aligned_test34,null,null",
+        };
+
+    String[] columnNames = {
+        "root.sg1.d2.s5",
+        "root.sg1.d1.s4",
+        "root.sg1.d2.s1",
+        "root.sg1.d1.s5",
+        "root.sg1.d2.s4",
+        "root.sg1.d1.s1"
+    };
+
+    Class.forName(Config.JDBC_DRIVER_NAME);
+    try (Connection connection =
+        DriverManager.getConnection(
+            Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+
+      // 1 4 5
+      boolean hasResultSet =
+          statement.execute(
+              "select d2.s5, d1.s4, d2.s1, d1.s5, d2.s4, d1.s1 from root.sg1 where time >= 16 and time <= 34 and (d1.s5 = 'aligned_test31' or d1.s5 = 'aligned_test32' or d1.s5 = 'aligned_test33' or d1.s5 = 'aligned_test34' or d2.s4 = true)");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        Map<String, Integer> map = new HashMap<>();
+        for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+          map.put(resultSetMetaData.getColumnName(i), i);
+        }
+        assertEquals(columnNames.length + 1, resultSetMetaData.getColumnCount());
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1));
+          for (String columnName : columnNames) {
+            int index = map.get(columnName);
+            builder.append(",").append(resultSet.getString(index));
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}