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

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


The following commit(s) were added to refs/heads/rel/0.12 by this push:
     new 50ac5d5  [To rel/0.12] Nested device leads to path not exist in align 
by device query (#4229)
50ac5d5 is described below

commit 50ac5d5883cd1d9d8570f1cfe5c9802589459c6e
Author: Xiangwei Wei <[email protected]>
AuthorDate: Wed Oct 27 09:28:52 2021 +0800

    [To rel/0.12] Nested device leads to path not exist in align by device 
query (#4229)
---
 .../db/query/dataset/AlignByDeviceDataSet.java     |  3 -
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java | 64 ++++++++++++++++++++--
 2 files changed, 58 insertions(+), 9 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
index ab4f79e..2a920dc 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/AlignByDeviceDataSet.java
@@ -223,9 +223,6 @@ public class AlignByDeviceDataSet extends QueryDataSet {
     try {
       MNode deviceNode = IoTDB.metaManager.getNodeByPath(device);
       Set<String> res = new HashSet<>(deviceNode.getChildren().keySet());
-      for (MNode mnode : deviceNode.getChildren().values()) {
-        res.addAll(mnode.getChildren().keySet());
-      }
 
       Template template = deviceNode.getUpperTemplate();
       if (template != null) {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
index 46dce37..3782763 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
@@ -23,9 +23,9 @@ import 
org.apache.iotdb.db.engine.compaction.CompactionStrategy;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
 
-import org.junit.AfterClass;
+import org.junit.After;
 import org.junit.Assert;
-import org.junit.BeforeClass;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.Connection;
@@ -99,8 +99,8 @@ public class IoTDBAlignByDeviceIT {
         "insert into root.other.d1(timestamp,s0) values(2, 3.14)",
       };
 
-  @BeforeClass
-  public static void setUp() throws Exception {
+  @Before
+  public void setUp() throws Exception {
     EnvironmentUtils.closeStatMonitor();
     EnvironmentUtils.envSetUp();
     IoTDBDescriptor.getInstance()
@@ -109,8 +109,8 @@ public class IoTDBAlignByDeviceIT {
     insertData();
   }
 
-  @AfterClass
-  public static void tearDown() throws Exception {
+  @After
+  public void tearDown() throws Exception {
     EnvironmentUtils.cleanEnv();
     IoTDBDescriptor.getInstance()
         .getConfig()
@@ -1328,4 +1328,56 @@ public class IoTDBAlignByDeviceIT {
       fail(e.getMessage());
     }
   }
+
+  @Test
+  public void selectNestedDevice() throws ClassNotFoundException {
+    String[] retArray =
+        new String[] {
+          "1,root.vehicle.d1,null,999,",
+          "1000,root.vehicle.d1,null,888,",
+          "1,root.vehicle.d1.nestedD1,1.0,null,",
+        };
+
+    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()) {
+      statement.execute("insert into root.vehicle.d1.nestedD1(time, nestedS0) 
values(1, 1)");
+      statement.execute("flush");
+
+      boolean hasResultSet = statement.execute("select * from root.vehicle.d1 
align by device");
+      Assert.assertTrue(hasResultSet);
+
+      try (ResultSet resultSet = statement.getResultSet()) {
+        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+        List<Integer> actualIndexToExpectedIndexList =
+            checkHeader(
+                resultSetMetaData,
+                "Time,Device,nestedS0,s0",
+                new int[] {
+                  Types.TIMESTAMP, Types.VARCHAR, Types.FLOAT, Types.INTEGER,
+                });
+
+        int cnt = 0;
+        while (resultSet.next()) {
+          String[] expectedStrings = retArray[cnt].split(",");
+          StringBuilder expectedBuilder = new StringBuilder();
+          StringBuilder actualBuilder = new StringBuilder();
+          for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+            actualBuilder.append(resultSet.getString(i)).append(",");
+            expectedBuilder
+                .append(expectedStrings[actualIndexToExpectedIndexList.get(i - 
1)])
+                .append(",");
+          }
+          Assert.assertEquals(expectedBuilder.toString(), 
actualBuilder.toString());
+          cnt++;
+        }
+        Assert.assertEquals(3, cnt);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
 }

Reply via email to