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/18 07:47:48 UTC

[iotdb] branch ty_new_vector created (now b88b023)

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

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


      at b88b023  Support RawQueryWithoutValue in aligned timeseries

This branch includes the following new commits:

     new 67ca536  add some comments and delete some useless functions
     new fe96097  Merge remote-tracking branch 'origin/master' into ty_new_vector
     new e6297eb  add some tests
     new b88b023  Support RawQueryWithoutValue in aligned timeseries

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


[iotdb] 04/04: Support RawQueryWithoutValue in aligned timeseries

Posted by ja...@apache.org.
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 b88b023acd37f7d9696b2e76ae116ceaaaa410c7
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Thu Nov 18 15:47:04 2021 +0800

    Support RawQueryWithoutValue in aligned timeseries
---
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |  16 +-
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |   7 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java |  12 +-
 .../{AlignedWriter.java => AlignedWriteUtil.java}  |  27 +-
 .../aligned/IoTDBRawQueryWithoutValueFilterIT.java | 540 +++++++++++++++++-
 ...DBRawQueryWithoutValueFilterWithDeletionIT.java | 613 +++++++++++++++++++++
 6 files changed, 1159 insertions(+), 56 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
index ca731b3..28e50b0 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/utils/MetaUtils.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.db.utils.TestOnly;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -91,27 +90,28 @@ public class MetaUtils {
    * root.sg.d1.vector1[s2], they will be organized to root.sg.d1.vector1 [s1,s2]
    *
    * @param fullPaths full path list without uniting the sub measurement under the same aligned time
-   *     series.
+   *     series. The list has been sorted by the alphabetical order, so all the aligned time series
+   *     of one device has already been placed contiguously.
    * @return Size of partial path list could NOT equal to the input list size. For example, the
    *     vector1 (s1,s2) would be returned once.
    */
   public static List<PartialPath> groupAlignedPaths(List<PartialPath> fullPaths) {
     List<PartialPath> result = new LinkedList<>();
-    Map<String, AlignedPath> alignedEntityToPath = new HashMap<>();
+    AlignedPath alignedPath = null;
     for (PartialPath path : fullPaths) {
       MeasurementPath measurementPath = (MeasurementPath) path;
       if (!measurementPath.isUnderAlignedEntity()) {
         result.add(measurementPath);
+        alignedPath = null;
       } else {
-        String entity = measurementPath.getDevice();
-        if (!alignedEntityToPath.containsKey(entity)) {
-          alignedEntityToPath.put(entity, new AlignedPath(measurementPath));
+        if (alignedPath == null) {
+          alignedPath = new AlignedPath(measurementPath);
+          result.add(alignedPath);
         } else {
-          alignedEntityToPath.get(entity).addMeasurement(measurementPath);
+          alignedPath.addMeasurement(measurementPath);
         }
       }
     }
-    result.addAll(alignedEntityToPath.values());
     return result;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
index 5fb024b..1a6316d 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertRowPlan.java
@@ -241,11 +241,8 @@ public class InsertRowPlan extends InsertPlan {
           }
           continue;
         }
-        if (isAligned) {
-          dataTypes[i] = measurementMNodes[i].getSchema().getSubMeasurementsTSDataTypeList().get(i);
-        } else {
-          dataTypes[i] = measurementMNodes[i].getSchema().getType();
-        }
+
+        dataTypes[i] = measurementMNodes[i].getSchema().getType();
         try {
           values[i] = CommonUtils.parseValue(dataTypes[i], values[i].toString());
         } catch (Exception e) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java
index 18014d2..806321f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/RawQueryDataSetWithoutValueFilter.java
@@ -298,7 +298,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet
                 if (encoder != null && encoder.needEncode(minTime)) {
                   intValue = encoder.encodeInt(intValue, minTime);
                 }
-                ReadWriteIOUtils.write(intValue, valueBAOSList[seriesIndex]);
+                ReadWriteIOUtils.write(intValue, valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case INT64:
@@ -307,7 +307,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet
                 if (encoder != null && encoder.needEncode(minTime)) {
                   longValue = encoder.encodeLong(longValue, minTime);
                 }
-                ReadWriteIOUtils.write(longValue, valueBAOSList[seriesIndex]);
+                ReadWriteIOUtils.write(longValue, valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case FLOAT:
@@ -316,7 +316,7 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet
                 if (encoder != null && encoder.needEncode(minTime)) {
                   floatValue = encoder.encodeFloat(floatValue, minTime);
                 }
-                ReadWriteIOUtils.write(floatValue, valueBAOSList[seriesIndex]);
+                ReadWriteIOUtils.write(floatValue, valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case DOUBLE:
@@ -325,19 +325,19 @@ public class RawQueryDataSetWithoutValueFilter extends QueryDataSet
                 if (encoder != null && encoder.needEncode(minTime)) {
                   doubleValue = encoder.encodeDouble(doubleValue, minTime);
                 }
-                ReadWriteIOUtils.write(doubleValue, valueBAOSList[seriesIndex]);
+                ReadWriteIOUtils.write(doubleValue, valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case BOOLEAN:
                 currentBitmapList[bufferIndex] = (currentBitmapList[bufferIndex] << 1) | FLAG;
                 ReadWriteIOUtils.write(
-                    cachedBatchDataArray[seriesIndex].getBoolean(), valueBAOSList[seriesIndex]);
+                    cachedBatchDataArray[seriesIndex].getBoolean(), valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case TEXT:
                 currentBitmapList[bufferIndex] = (currentBitmapList[bufferIndex] << 1) | FLAG;
                 ReadWriteIOUtils.write(
-                    cachedBatchDataArray[seriesIndex].getBinary(), valueBAOSList[seriesIndex]);
+                    cachedBatchDataArray[seriesIndex].getBinary(), valueBAOSList[bufferIndex]);
                 bufferIndex++;
                 break;
               case VECTOR:
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java
similarity index 92%
rename from server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java
rename to server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java
index dd7244c..5f0af39 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java
@@ -18,24 +18,20 @@
  */
 package org.apache.iotdb.db.integration.aligned;
 
-import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
 
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.Statement;
 
-public class AlignedWriter {
+public class AlignedWriteUtil {
 
   private static final String[] sqls =
       new String[] {
         "SET STORAGE GROUP TO root.sg1",
-        "create aligned timeseries root.sg1.d1(s1 FLOAT encoding=RLE, s2 INT32 encoding=Grollia compression=SNAPPY, s3 INT64, s4 BOOLEAN, s5 TEXT) compression=SNAPPY",
+        "create aligned timeseries root.sg1.d1(s1 FLOAT encoding=RLE, s2 INT32 encoding=Gorilla compression=SNAPPY, s3 INT64, s4 BOOLEAN, s5 TEXT)",
         "create timeseries root.sg1.d2.s1 WITH DATATYPE=FLOAT, encoding=RLE",
-        "create timeseries root.sg1.d2.s2 WITH DATATYPE=INT32, encoding=Grollia",
+        "create timeseries root.sg1.d2.s2 WITH DATATYPE=INT32, encoding=Gorilla",
         "create timeseries root.sg1.d2.s3 WITH DATATYPE=INT64",
         "create timeseries root.sg1.d2.s4 WITH DATATYPE=BOOLEAN",
         "create timeseries root.sg1.d2.s5 WITH DATATYPE=TEXT",
@@ -92,7 +88,7 @@ public class AlignedWriter {
         "insert into root.sg1.d1(time, s3, s4) aligned values(29, 29, FALSE)",
         "insert into root.sg1.d1(time, s3, s4) aligned values(30, 30, FALSE)",
         "insert into root.sg1.d2(time, s3, s4) values(21, 21, TRUE)",
-        "insert into root.sg1.d2(time, s3, s4) values(22, 21, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(22, 22, TRUE)",
         "insert into root.sg1.d2(time, s3, s4) values(23, 23, TRUE)",
         "insert into root.sg1.d2(time, s3, s4) values(24, 24, TRUE)",
         "insert into root.sg1.d2(time, s3, s4) values(25, 25, TRUE)",
@@ -122,22 +118,9 @@ public class AlignedWriter {
         "insert into root.sg1.d2(time, s2, s5) values(38, 38, 'non_aligned_test38')",
         "insert into root.sg1.d2(time, s2, s5) values(39, 39, 'non_aligned_test39')",
         "insert into root.sg1.d2(time, s2, s5) values(40, 40, 'non_aligned_test40')",
-        "flush",
       };
 
-  @BeforeClass
-  public static void setUp() throws Exception {
-    EnvironmentUtils.closeStatMonitor();
-    EnvironmentUtils.envSetUp();
-    insertData();
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    EnvironmentUtils.cleanEnv();
-  }
-
-  private static void insertData() throws ClassNotFoundException {
+  public static void insertData() throws ClassNotFoundException {
     Class.forName(Config.JDBC_DRIVER_NAME);
     try (Connection connection =
             DriverManager.getConnection(
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
index 0b61709..f13ef00 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
@@ -18,9 +18,13 @@
  */
 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.jdbc.Config;
 
+import org.junit.AfterClass;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import java.sql.Connection;
@@ -35,7 +39,40 @@ import java.util.Map;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter {
+public class IoTDBRawQueryWithoutValueFilterIT {
+
+  private static boolean enableSeqSpaceCompaction;
+  private static boolean enableUnseqSpaceCompaction;
+  private 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 selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException {
@@ -62,16 +99,16 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter {
           "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,21,true,null",
-          "22,null,null,22,22,true,null",
-          "23,null,null,23,23,true,null",
-          "24,null,null,24,24,true,null",
-          "25,null,null,25,25,true,null",
-          "26,null,null,26,26,false,null",
-          "27,null,null,27,27,false,null",
-          "28,null,null,28,28,false,null",
-          "29,null,null,29,29,false,null",
-          "30,null,null,30,30,false,null",
+          "21,null,null,21,true,null",
+          "22,null,null,22,true,null",
+          "23,null,null,23,true,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",
@@ -84,6 +121,10 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter {
           "40,null,40,null,null,aligned_test40",
         };
 
+    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(
@@ -99,13 +140,482 @@ public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter {
         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 selectAllAlignedAndNonAlignedTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,1.0,1,1,true,aligned_test1,1.0,1,1,true,non_aligned_test1",
+          "2,2.0,2,2,null,aligned_test2,2.0,2,2,null,non_aligned_test2",
+          "3,3.0,null,3,false,aligned_test3,3.0,null,3,false,non_aligned_test3",
+          "4,4.0,4,null,true,aligned_test4,4.0,4,null,true,non_aligned_test4",
+          "5,5.0,5,null,true,aligned_test5,5.0,5,null,true,non_aligned_test5",
+          "6,6.0,6,6,true,null,6.0,6,6,true,null",
+          "7,7.0,7,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7",
+          "8,8.0,8,8,null,aligned_test8,8.0,8,8,null,non_aligned_test8",
+          "9,9.0,9,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9",
+          "10,null,10,10,true,aligned_test10,null,10,10,true,non_aligned_test10",
+          "11,11.0,11,11,null,null,11.0,11,11,null,null",
+          "12,12.0,12,12,null,null,12.0,12,12,null,null",
+          "13,13.0,13,13,null,null,13.0,13,13,null,null",
+          "14,14.0,14,14,null,null,14.0,14,14,null,null",
+          "15,15.0,15,15,null,null,15.0,15,15,null,null",
+          "16,16.0,16,16,null,null,16.0,16,16,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",
+          "21,null,null,21,true,null,null,null,21,true,null",
+          "22,null,null,22,true,null,null,null,22,true,null",
+          "23,null,null,23,true,null,null,null,23,true,null",
+          "24,null,null,24,true,null,null,null,24,true,null",
+          "25,null,null,25,true,null,null,null,25,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",
+          "31,null,31,null,null,aligned_test31,null,31,null,null,non_aligned_test31",
+          "32,null,32,null,null,aligned_test32,null,32,null,null,non_aligned_test32",
+          "33,null,33,null,null,aligned_test33,null,33,null,null,non_aligned_test33",
+          "34,null,34,null,null,aligned_test34,null,34,null,null,non_aligned_test34",
+          "35,null,35,null,null,aligned_test35,null,35,null,null,non_aligned_test35",
+          "36,null,36,null,null,aligned_test36,null,36,null,null,non_aligned_test36",
+          "37,null,37,null,null,aligned_test37,null,37,null,null,non_aligned_test37",
+          "38,null,38,null,null,aligned_test38,null,38,null,null,non_aligned_test38",
+          "39,null,39,null,null,aligned_test39,null,39,null,null,non_aligned_test39",
+          "40,null,40,null,null,aligned_test40,null,40,null,null,non_aligned_test40",
+        };
+
+    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.*");
+      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 selectAllAlignedWithTimeFilterTest() 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,13.0,13,13,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",
+          "21,null,null,21,true,null",
+          "22,null,null,22,true,null",
+          "23,null,null,23,true,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",
+        };
+
+    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");
+      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 selectSomeAlignedWithoutValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,1.0,true,aligned_test1",
+          "2,2.0,null,aligned_test2",
+          "3,3.0,false,aligned_test3",
+          "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",
+          "10,null,true,aligned_test10",
+          "11,11.0,null,null",
+          "12,12.0,null,null",
+          "13,13.0,null,null",
+          "14,14.0,null,null",
+          "15,15.0,null,null",
+          "16,16.0,null,null",
+          "17,17.0,null,null",
+          "18,18.0,null,null",
+          "19,19.0,null,null",
+          "20,20.0,null,null",
+          "21,null,true,null",
+          "22,null,true,null",
+          "23,null,true,null",
+          "24,null,true,null",
+          "25,null,true,null",
+          "26,null,false,null",
+          "27,null,false,null",
+          "28,null,false,null",
+          "29,null,false,null",
+          "30,null,false,null",
+          "31,null,null,aligned_test31",
+          "32,null,null,aligned_test32",
+          "33,null,null,aligned_test33",
+          "34,null,null,aligned_test34",
+          "35,null,null,aligned_test35",
+          "36,null,null,aligned_test36",
+          "37,null,null,aligned_test37",
+          "38,null,null,aligned_test38",
+          "39,null,null,aligned_test39",
+          "40,null,null,aligned_test40",
+        };
+
+    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");
+      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 selectSomeAlignedWithoutValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,1.0,true",
+          "2,2.0,null",
+          "3,3.0,false",
+          "4,4.0,true",
+          "5,5.0,true",
+          "6,6.0,true",
+          "7,7.0,false",
+          "8,8.0,null",
+          "9,9.0,false",
+          "10,null,true",
+          "11,11.0,null",
+          "12,12.0,null",
+          "13,13.0,null",
+          "14,14.0,null",
+          "15,15.0,null",
+          "16,16.0,null",
+          "17,17.0,null",
+          "18,18.0,null",
+          "19,19.0,null",
+          "20,20.0,null",
+          "21,null,true",
+          "22,null,true",
+          "23,null,true",
+          "24,null,true",
+          "25,null,true",
+          "26,null,false",
+          "27,null,false",
+          "28,null,false",
+          "29,null,false",
+          "30,null,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");
+      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 selectSomeAlignedWithTimeFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "16,16.0,null,null",
+          "17,17.0,null,null",
+          "18,18.0,null,null",
+          "19,19.0,null,null",
+          "20,20.0,null,null",
+          "21,null,true,null",
+          "22,null,true,null",
+          "23,null,true,null",
+          "24,null,true,null",
+          "25,null,true,null",
+          "26,null,false,null",
+          "27,null,false,null",
+          "28,null,false,null",
+          "29,null,false,null",
+          "30,null,false,null",
+          "31,null,null,aligned_test31",
+          "32,null,null,aligned_test32",
+          "33,null,null,aligned_test33",
+          "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 time >= 16 and time <= 34");
+      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 selectSomeAlignedAndNonAlignedWithTimeFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "16,null,null,16.0,null,null,16.0",
+          "17,null,null,17.0,null,null,17.0",
+          "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,true,null,null,true,null",
+          "24,null,true,null,null,true,null",
+          "25,null,true,null,null,true,null",
+          "26,null,false,null,null,false,null",
+          "27,null,false,null,null,false,null",
+          "28,null,false,null,null,false,null",
+          "29,null,false,null,null,false,null",
+          "30,null,false,null,null,false,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");
+      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)).append(",");
-          for (int i = 1; i <= 5; i++) {
-            int index = map.get("root.sg1.d1.s" + i);
-            builder.append(resultSet.getString(index)).append(",");
+          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++;
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java
new file mode 100644
index 0000000..fbd716b
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java
@@ -0,0 +1,613 @@
+/*
+ * 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.jdbc.Config;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class IoTDBRawQueryWithoutValueFilterWithDeletionIT {
+
+  private static boolean enableSeqSpaceCompaction;
+  private static boolean enableUnseqSpaceCompaction;
+  private 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 <= 27");
+    } 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 selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,null,1,true,aligned_test1",
+          "2,null,2,null,aligned_test2",
+          "3,null,3,false,aligned_test3",
+          "4,null,null,true,aligned_test4",
+          "5,null,null,true,aligned_test5",
+          "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",
+          "13,null,13,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,null,23,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",
+          "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",
+          "34,null,null,null,aligned_test34",
+          "35,null,null,null,aligned_test35",
+          "36,null,null,null,aligned_test36",
+          "37,null,null,null,aligned_test37",
+          "38,null,null,null,aligned_test38",
+          "39,null,null,null,aligned_test39",
+          "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");
+      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 selectAllAlignedAndNonAlignedTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,null,1,true,aligned_test1,1.0,1,1,true,non_aligned_test1",
+          "2,null,2,null,aligned_test2,2.0,2,2,null,non_aligned_test2",
+          "3,null,3,false,aligned_test3,3.0,null,3,false,non_aligned_test3",
+          "4,null,null,true,aligned_test4,4.0,4,null,true,non_aligned_test4",
+          "5,null,null,true,aligned_test5,5.0,5,null,true,non_aligned_test5",
+          "6,null,6,true,null,6.0,6,6,true,null",
+          "7,null,7,false,aligned_test7,7.0,7,7,false,non_aligned_test7",
+          "8,null,8,null,aligned_test8,8.0,8,8,null,non_aligned_test8",
+          "9,null,9,false,aligned_test9,9.0,9,9,false,non_aligned_test9",
+          "10,null,10,true,aligned_test10,null,10,10,true,non_aligned_test10",
+          "11,null,11,null,null,11.0,11,11,null,null",
+          "12,null,12,null,null,12.0,12,12,null,null",
+          "13,null,13,null,null,13.0,13,13,null,null",
+          "14,null,14,null,null,14.0,14,14,null,null",
+          "15,null,15,null,null,15.0,15,15,null,null",
+          "16,null,16,null,null,16.0,16,16,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,null,23,true,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",
+          "31,null,null,null,aligned_test31,null,31,null,null,non_aligned_test31",
+          "32,null,null,null,aligned_test32,null,32,null,null,non_aligned_test32",
+          "33,null,null,null,aligned_test33,null,33,null,null,non_aligned_test33",
+          "34,null,null,null,aligned_test34,null,34,null,null,non_aligned_test34",
+          "35,null,null,null,aligned_test35,null,35,null,null,non_aligned_test35",
+          "36,null,null,null,aligned_test36,null,36,null,null,non_aligned_test36",
+          "37,null,null,null,aligned_test37,null,37,null,null,non_aligned_test37",
+          "38,null,null,null,aligned_test38,null,38,null,null,non_aligned_test38",
+          "39,null,null,null,aligned_test39,null,39,null,null,non_aligned_test39",
+          "40,null,null,null,aligned_test40,null,40,null,null,non_aligned_test40",
+        };
+
+    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.*");
+      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 selectAllAlignedWithTimeFilterTest() 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,13,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,null,23,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",
+          "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",
+        };
+
+    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");
+      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 selectSomeAlignedWithoutValueFilterTest1() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,null,true,aligned_test1",
+          "2,null,null,aligned_test2",
+          "3,null,false,aligned_test3",
+          "4,null,true,aligned_test4",
+          "5,null,true,aligned_test5",
+          "6,null,true,null",
+          "7,null,false,aligned_test7",
+          "8,null,null,aligned_test8",
+          "9,null,false,aligned_test9",
+          "10,null,true,aligned_test10",
+          "21,null,true,null",
+          "22,null,true,null",
+          "23,null,true,null",
+          "24,null,true,null",
+          "25,null,true,null",
+          "26,null,false,null",
+          "27,null,false,null",
+          "28,null,false,null",
+          "29,null,false,null",
+          "30,null,false,null",
+          "31,null,null,aligned_test31",
+          "32,null,null,aligned_test32",
+          "33,null,null,aligned_test33",
+          "34,null,null,aligned_test34",
+          "35,null,null,aligned_test35",
+          "36,null,null,aligned_test36",
+          "37,null,null,aligned_test37",
+          "38,null,null,aligned_test38",
+          "39,null,null,aligned_test39",
+          "40,null,null,aligned_test40",
+        };
+
+    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");
+      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 selectSomeAlignedWithoutValueFilterTest2() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,null,true",
+          "3,null,false",
+          "4,null,true",
+          "5,null,true",
+          "6,null,true",
+          "7,null,false",
+          "9,null,false",
+          "10,null,true",
+          "21,null,true",
+          "22,null,true",
+          "23,null,true",
+          "24,null,true",
+          "25,null,true",
+          "26,null,false",
+          "27,null,false",
+          "28,null,false",
+          "29,null,false",
+          "30,null,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");
+      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 selectSomeAlignedWithTimeFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "21,null,true,null",
+          "22,null,true,null",
+          "23,null,true,null",
+          "24,null,true,null",
+          "25,null,true,null",
+          "26,null,false,null",
+          "27,null,false,null",
+          "28,null,false,null",
+          "29,null,false,null",
+          "30,null,false,null",
+          "31,null,null,aligned_test31",
+          "32,null,null,aligned_test32",
+          "33,null,null,aligned_test33",
+          "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 time >= 16 and time <= 34");
+      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 selectSomeAlignedAndNonAlignedWithTimeFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "16,null,null,16.0,null,null,null",
+          "17,null,null,17.0,null,null,null",
+          "18,null,null,18.0,null,null,null",
+          "19,null,null,19.0,null,null,null",
+          "20,null,null,20.0,null,null,null",
+          "21,null,true,null,null,true,null",
+          "22,null,true,null,null,true,null",
+          "23,null,true,null,null,true,null",
+          "24,null,true,null,null,true,null",
+          "25,null,true,null,null,true,null",
+          "26,null,false,null,null,false,null",
+          "27,null,false,null,null,false,null",
+          "28,null,false,null,null,false,null",
+          "29,null,false,null,null,false,null",
+          "30,null,false,null,null,false,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");
+      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());
+    }
+  }
+}

[iotdb] 01/04: add some comments and delete some useless functions

Posted by ja...@apache.org.
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 67ca53625e3099a32b0562a214fe6aec6a9993ca
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Wed Nov 17 11:18:14 2021 +0800

    add some comments and delete some useless functions
---
 .../main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java   | 4 ----
 .../java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java | 6 ++----
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
index e947144..5163da6 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
@@ -124,10 +124,6 @@ public abstract class QueryPlan extends PhysicalPlan {
     return false;
   }
 
-  public void setPathToIndex(Map<String, Integer> pathToIndex) {
-    this.pathToIndex = pathToIndex;
-  }
-
   public Map<String, Integer> getPathToIndex() {
     return pathToIndex;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
index 814a4c7..863a586 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java
@@ -66,7 +66,6 @@ public class RawDataQueryPlan extends QueryPlan {
     }
     indexedPaths.sort(Comparator.comparing(pair -> pair.left));
 
-    Map<String, Integer> pathNameToReaderIndex = new HashMap<>();
     Set<String> columnForReaderSet = new HashSet<>();
     Set<String> columnForDisplaySet = new HashSet<>();
 
@@ -74,10 +73,10 @@ public class RawDataQueryPlan extends QueryPlan {
       PartialPath originalPath = indexedPath.left;
       Integer originalIndex = indexedPath.right;
 
+      // TODO this method must have some big problem
       String columnForReader = getColumnForReaderFromPath(originalPath, originalIndex);
       if (!columnForReaderSet.contains(columnForReader)) {
         addDeduplicatedPaths(originalPath);
-        pathNameToReaderIndex.put(columnForReader, pathNameToReaderIndex.size());
         if (this instanceof AggregationPlan) {
           ((AggregationPlan) this)
               .addDeduplicatedAggregations(getAggregations().get(originalIndex));
@@ -92,8 +91,7 @@ public class RawDataQueryPlan extends QueryPlan {
       }
     }
 
-    // if it is a RawQueryWithoutValueFilter, we also need to group all the subSensors of one
-    // vector into one VectorPartialPath
+    // group all the aligned sensors of one device into one AlignedPath
     groupVectorPaths(physicalGenerator);
   }
 

[iotdb] 02/04: Merge remote-tracking branch 'origin/master' into ty_new_vector

Posted by ja...@apache.org.
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 fe96097c7dbd412f77f6e2f5b291f3cebb45a408
Merge: 67ca536 96df186
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Wed Nov 17 11:18:47 2021 +0800

    Merge remote-tracking branch 'origin/master' into ty_new_vector

 .../org/apache/iotdb/db/qp/sql/IoTDBSqlLexer.g4    |   8 +
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  70 +++++--
 .../iotdb/cluster/coordinator/Coordinator.java     |   8 +-
 .../apache/iotdb/cluster/metadata/CMManager.java   |  21 +-
 .../apache/iotdb/cluster/utils/PartitionUtils.java |  10 +-
 .../log/snapshot/MetaSimpleSnapshotTest.java       |   2 +-
 .../cluster/server/member/MetaGroupMemberTest.java |   2 +-
 .../cluster/utils/CreateTemplatePlanUtil.java      |   2 +-
 docs/UserGuide/Appendix/SQL-Reference.md           |  89 +++++++--
 .../Data-Concept/Data-Model-and-Terminology.md     |  32 +--
 ...{Measurement-Template.md => Schema-Template.md} |  20 +-
 .../DDL-Data-Definition-Language.md                |  75 +++++--
 docs/zh/UserGuide/Appendix/SQL-Reference.md        |  87 ++++++--
 .../Data-Concept/Data-Model-and-Terminology.md     |  30 ++-
 ...{Measurement-Template.md => Schema-Template.md} |   2 +-
 .../DDL-Data-Definition-Language.md                |  72 +++++--
 .../iotdb/AlignedTimeseriesSessionExample.java     |   9 +-
 .../org/apache/iotdb/db/metadata/MManager.java     |  56 +++---
 .../iotdb/db/metadata/logfile/MLogTxtWriter.java   |  19 +-
 .../iotdb/db/metadata/logfile/MLogWriter.java      |  18 +-
 .../org/apache/iotdb/db/metadata/mtree/MTree.java  |   6 +-
 .../iotdb/db/metadata/template/Template.java       |   2 +-
 .../db/metadata/template/TemplateManager.java      |   6 +-
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |  10 +
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  51 +++--
 .../org/apache/iotdb/db/qp/logical/Operator.java   |   6 +-
 .../iotdb/db/qp/logical/crud/InsertOperator.java   |  21 +-
 .../qp/logical/sys/ActivateTemplateOperator.java   |  51 +++++
 .../sys/CreateAlignedTimeSeriesOperator.java       | 131 ++++++++++++
 .../db/qp/logical/sys/CreateTemplateOperator.java  | 122 ++++++++++++
 .../db/qp/logical/sys/SetTemplateOperator.java     |  60 ++++++
 .../db/qp/logical/sys/UnsetTemplateOperator.java   |  60 ++++++
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |  24 +--
 ...TemplatePlan.java => ActivateTemplatePlan.java} |  16 +-
 .../physical/{crud => sys}/AppendTemplatePlan.java |   2 +-
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  |  35 ++--
 .../physical/{crud => sys}/CreateTemplatePlan.java |   2 +-
 .../physical/{crud => sys}/PruneTemplatePlan.java  |   2 +-
 .../SetTemplatePlan.java}                          |  16 +-
 .../UnsetTemplatePlan.java}                        |  16 +-
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    | 219 +++++++++++++++++++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  22 ++-
 .../org/apache/iotdb/db/tools/mlog/MLogParser.java |  21 +-
 .../IoTDBCreateAlignedTimeseriesIT.java            | 106 ++++++++++
 .../db/integration/IoTDBSchemaTemplateIT.java      | 177 +++++++++++++++++
 .../iotdb/db/metadata/MManagerBasicTest.java       |  82 ++++----
 .../org/apache/iotdb/db/metadata/TemplateTest.java |   9 +-
 .../iotdb/db/metadata/mlog/MLogUpgraderTest.java   |   2 +-
 .../iotdb/db/qp/physical/InsertRowPlanTest.java    |   6 +-
 .../db/qp/physical/PhysicalPlanSerializeTest.java  |   2 +-
 .../org/apache/iotdb/db/tools/MLogParserTest.java  |  17 +-
 .../java/org/apache/iotdb/session/Session.java     |   9 +-
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java |   2 +-
 .../session/IoTDBSessionVectorABDeviceIT.java      |   4 +-
 .../IoTDBSessionVectorAggregationWithUnSeqIT.java  |   4 +-
 .../apache/iotdb/session/template/TemplateUT.java  |   2 +-
 thrift/rpc-changelist.md                           |   4 +-
 thrift/src/main/thrift/rpc.thrift                  |   2 +-
 58 files changed, 1560 insertions(+), 401 deletions(-)

[iotdb] 03/04: add some tests

Posted by ja...@apache.org.
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 e6297eb4528f757207949d4af90da68c867724ba
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Thu Nov 18 12:06:54 2021 +0800

    add some tests
---
 .../db/integration/aligned/AlignedWriter.java      | 155 +++++++++++++++++++++
 .../aligned/IoTDBRawQueryWithoutValueFilterIT.java | 121 ++++++++++++++++
 2 files changed, 276 insertions(+)

diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java
new file mode 100644
index 0000000..dd7244c
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriter.java
@@ -0,0 +1,155 @@
+/*
+ * 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.utils.EnvironmentUtils;
+import org.apache.iotdb.jdbc.Config;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+
+public class AlignedWriter {
+
+  private static final String[] sqls =
+      new String[] {
+        "SET STORAGE GROUP TO root.sg1",
+        "create aligned timeseries root.sg1.d1(s1 FLOAT encoding=RLE, s2 INT32 encoding=Grollia compression=SNAPPY, s3 INT64, s4 BOOLEAN, s5 TEXT) compression=SNAPPY",
+        "create timeseries root.sg1.d2.s1 WITH DATATYPE=FLOAT, encoding=RLE",
+        "create timeseries root.sg1.d2.s2 WITH DATATYPE=INT32, encoding=Grollia",
+        "create timeseries root.sg1.d2.s3 WITH DATATYPE=INT64",
+        "create timeseries root.sg1.d2.s4 WITH DATATYPE=BOOLEAN",
+        "create timeseries root.sg1.d2.s5 WITH DATATYPE=TEXT",
+        "insert into root.sg1.d1(time, s1, s2, s3, s4, s5) aligned values(1, 1.0, 1, 1, TRUE, 'aligned_test1')",
+        "insert into root.sg1.d1(time, s1, s2, s3, s5) aligned values(2, 2.0, 2, 2, 'aligned_test2')",
+        "insert into root.sg1.d1(time, s1, s3, s4, s5) aligned values(3, 3.0, 3, FALSE, 'aligned_test3')",
+        "insert into root.sg1.d1(time, s1, s2, s4, s5) aligned values(4, 4.0, 4, TRUE, 'aligned_test4')",
+        "insert into root.sg1.d1(time, s1, s2, s4, s5) aligned values(5, 5.0, 5, TRUE, 'aligned_test5')",
+        "insert into root.sg1.d1(time, s1, s2, s3, s4) aligned values(6, 6.0, 6, 6, TRUE)",
+        "insert into root.sg1.d1(time, s1, s2, s3, s4, s5) aligned values(7, 7.0, 7, 7, FALSE, 'aligned_test7')",
+        "insert into root.sg1.d1(time, s1, s2, s3, s5) aligned values(8, 8.0, 8, 8, 'aligned_test8')",
+        "insert into root.sg1.d1(time, s1, s2, s3, s4, s5) aligned values(9, 9.0, 9, 9, FALSE, 'aligned_test9')",
+        "insert into root.sg1.d1(time, s2, s3, s4, s5) aligned values(10, 10, 10, TRUE, 'aligned_test10')",
+        "insert into root.sg1.d2(time, s1, s2, s3, s4, s5) values(1, 1.0, 1, 1, TRUE, 'non_aligned_test1')",
+        "insert into root.sg1.d2(time, s1, s2, s3, s5) values(2, 2.0, 2, 2, 'non_aligned_test2')",
+        "insert into root.sg1.d2(time, s1, s3, s4, s5) values(3, 3.0, 3, FALSE, 'non_aligned_test3')",
+        "insert into root.sg1.d2(time, s1, s2, s4, s5) values(4, 4.0, 4, TRUE, 'non_aligned_test4')",
+        "insert into root.sg1.d2(time, s1, s2, s4, s5) values(5, 5.0, 5, TRUE, 'non_aligned_test5')",
+        "insert into root.sg1.d2(time, s1, s2, s3, s4) values(6, 6.0, 6, 6, TRUE)",
+        "insert into root.sg1.d2(time, s1, s2, s3, s4, s5) values(7, 7.0, 7, 7, FALSE, 'non_aligned_test7')",
+        "insert into root.sg1.d2(time, s1, s2, s3, s5) values(8, 8.0, 8, 8, 'non_aligned_test8')",
+        "insert into root.sg1.d2(time, s1, s2, s3, s4, s5) values(9, 9.0, 9, 9, FALSE, 'non_aligned_test9')",
+        "insert into root.sg1.d2(time, s2, s3, s4, s5) values(10, 10, 10, TRUE, 'non_aligned_test10')",
+        "flush",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(11, 11.0, 11, 11)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(12, 12.0, 12, 12)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(13, 13.0, 13, 13)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(14, 14.0, 14, 14)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(15, 15.0, 15, 15)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(16, 16.0, 16, 16)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(17, 17.0, 17, 17)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(18, 18.0, 18, 18)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(19, 19.0, 19, 19)",
+        "insert into root.sg1.d1(time, s1, s2, s3) aligned values(20, 20.0, 20, 20)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(11, 11.0, 11, 11)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(12, 12.0, 12, 12)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(13, 13.0, 13, 13)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(14, 14.0, 14, 14)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(15, 15.0, 15, 15)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(16, 16.0, 16, 16)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(17, 17.0, 17, 17)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(18, 18.0, 18, 18)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(19, 19.0, 19, 19)",
+        "insert into root.sg1.d2(time, s1, s2, s3) values(20, 20.0, 20, 20)",
+        "flush",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(21, 21, TRUE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(22, 22, TRUE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(23, 23, TRUE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(24, 24, TRUE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(25, 25, TRUE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(26, 26, FALSE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(27, 27, FALSE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(28, 28, FALSE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(29, 29, FALSE)",
+        "insert into root.sg1.d1(time, s3, s4) aligned values(30, 30, FALSE)",
+        "insert into root.sg1.d2(time, s3, s4) values(21, 21, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(22, 21, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(23, 23, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(24, 24, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(25, 25, TRUE)",
+        "insert into root.sg1.d2(time, s3, s4) values(26, 26, FALSE)",
+        "insert into root.sg1.d2(time, s3, s4) values(27, 27, FALSE)",
+        "insert into root.sg1.d2(time, s3, s4) values(28, 28, FALSE)",
+        "insert into root.sg1.d2(time, s3, s4) values(29, 29, FALSE)",
+        "insert into root.sg1.d2(time, s3, s4) values(30, 30, FALSE)",
+        "flush",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(31, 31, 'aligned_test31')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(32, 32, 'aligned_test32')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(33, 33, 'aligned_test33')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(34, 34, 'aligned_test34')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(35, 35, 'aligned_test35')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(36, 36, 'aligned_test36')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(37, 37, 'aligned_test37')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(38, 38, 'aligned_test38')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(39, 39, 'aligned_test39')",
+        "insert into root.sg1.d1(time, s2, s5) aligned values(40, 40, 'aligned_test40')",
+        "insert into root.sg1.d2(time, s2, s5) values(31, 31, 'non_aligned_test31')",
+        "insert into root.sg1.d2(time, s2, s5) values(32, 32, 'non_aligned_test32')",
+        "insert into root.sg1.d2(time, s2, s5) values(33, 33, 'non_aligned_test33')",
+        "insert into root.sg1.d2(time, s2, s5) values(34, 34, 'non_aligned_test34')",
+        "insert into root.sg1.d2(time, s2, s5) values(35, 35, 'non_aligned_test35')",
+        "insert into root.sg1.d2(time, s2, s5) values(36, 36, 'non_aligned_test36')",
+        "insert into root.sg1.d2(time, s2, s5) values(37, 37, 'non_aligned_test37')",
+        "insert into root.sg1.d2(time, s2, s5) values(38, 38, 'non_aligned_test38')",
+        "insert into root.sg1.d2(time, s2, s5) values(39, 39, 'non_aligned_test39')",
+        "insert into root.sg1.d2(time, s2, s5) values(40, 40, 'non_aligned_test40')",
+        "flush",
+      };
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvironmentUtils.closeStatMonitor();
+    EnvironmentUtils.envSetUp();
+    insertData();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvironmentUtils.cleanEnv();
+  }
+
+  private static void insertData() throws ClassNotFoundException {
+    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()) {
+
+      // create aligned and non-aligned time series
+      for (String sql : sqls) {
+        statement.execute(sql);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+  }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
new file mode 100644
index 0000000..0b61709
--- /dev/null
+++ b/server/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
@@ -0,0 +1,121 @@
+/*
+ * 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.jdbc.Config;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class IoTDBRawQueryWithoutValueFilterIT extends AlignedWriter {
+
+  @Test
+  public void selectAllAlignedWithoutValueFilterTest() throws ClassNotFoundException {
+
+    String[] retArray =
+        new String[] {
+          "1,1.0,1,1,true,aligned_test1",
+          "2,2.0,2,2,null,aligned_test2",
+          "3,3.0,null,3,false,aligned_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,13.0,13,13,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",
+          "21,null,null,21,21,true,null",
+          "22,null,null,22,22,true,null",
+          "23,null,null,23,23,true,null",
+          "24,null,null,24,24,true,null",
+          "25,null,null,25,25,true,null",
+          "26,null,null,26,26,false,null",
+          "27,null,null,27,27,false,null",
+          "28,null,null,28,28,false,null",
+          "29,null,null,29,29,false,null",
+          "30,null,null,30,30,false,null",
+          "31,null,31,null,null,aligned_test31",
+          "32,null,32,null,null,aligned_test32",
+          "33,null,33,null,null,aligned_test33",
+          "34,null,34,null,null,aligned_test34",
+          "35,null,35,null,null,aligned_test35",
+          "36,null,36,null,null,aligned_test36",
+          "37,null,37,null,null,aligned_test37",
+          "38,null,38,null,null,aligned_test38",
+          "39,null,39,null,null,aligned_test39",
+          "40,null,40,null,null,aligned_test40",
+        };
+
+    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");
+      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);
+        }
+        int cnt = 0;
+        while (resultSet.next()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append(resultSet.getString(1)).append(",");
+          for (int i = 1; i <= 5; i++) {
+            int index = map.get("root.sg1.d1.s" + i);
+            builder.append(resultSet.getString(index)).append(",");
+          }
+          assertEquals(retArray[cnt], builder.toString());
+          cnt++;
+        }
+        assertEquals(retArray.length, cnt);
+      }
+
+    } catch (SQLException e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}