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 <[email protected]>
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());
+    }
+  }
+}

Reply via email to