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/05/21 07:32:28 UTC

[iotdb] branch WithoutNullBug created (now b654518)

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

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


      at b654518  Fix Without Null ALL doesn't take effect in align by device clause

This branch includes the following new commits:

     new b654518  Fix Without Null ALL doesn't take effect in align by device clause

The 1 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] 01/01: Fix Without Null ALL doesn't take effect in align by device clause

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b654518455ed6c96d48547c4c69cdb947854ff3b
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Fri May 21 15:31:56 2021 +0800

    Fix Without Null ALL doesn't take effect in align by device clause
---
 .../db/query/dataset/AlignByDeviceDataSet.java     |  1 +
 .../db/integration/IoTDBWithoutAllNullIT.java      | 92 +++++++++++++++++++---
 .../apache/iotdb/tsfile/read/common/RowRecord.java |  5 ++
 3 files changed, 87 insertions(+), 11 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 38e1821..1821ae7 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
@@ -248,6 +248,7 @@ public class AlignByDeviceDataSet extends QueryDataSet {
     Field deviceField = new Field(TSDataType.TEXT);
     deviceField.setBinaryV(new Binary(currentDevice.getFullPath()));
     rowRecord.addField(deviceField);
+    rowRecord.resetNullFlag();
 
     List<Field> measurementFields = originRowRecord.getFields();
     Map<String, Field> currentColumnMap = new HashMap<>();
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java
index 95cce53..100cec5 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java
@@ -18,24 +18,22 @@
  */
 package org.apache.iotdb.db.integration;
 
+import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
-
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.Statement;
-
-import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 public class IoTDBWithoutAllNullIT {
 
   private static final String[] dataSet =
@@ -189,4 +187,76 @@ public class IoTDBWithoutAllNullIT {
       fail(e.getMessage());
     }
   }
+
+  @Test
+  public void withoutAllNullTest4() {
+    String[] retArray1 = new String[] {"11,root.testWithoutAllNull.d1,24,true,55.5"};
+    try (Connection connection =
+        DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      boolean hasResultSet =
+          statement.execute(
+              "select last_value(*) from root.testWithoutAllNull.d1 GROUP BY([1, 21), 5ms) WITHOUT NULL ALL LIMIT 1 OFFSET 1 ALIGN BY DEVICE");
+
+      assertTrue(hasResultSet);
+      int cnt;
+      try (ResultSet resultSet = statement.getResultSet()) {
+        cnt = 0;
+        while (resultSet.next()) {
+          String ans =
+              resultSet.getString(TIMESTAMP_STR)
+                  + ","
+                  + resultSet.getString("Device")
+                  +","
+                  + resultSet.getString("last_value(s1)")
+                  + ","
+                  + resultSet.getString("last_value(s2)")
+                  + ","
+                  + resultSet.getString("last_value(s3)");
+          assertEquals(retArray1[cnt], ans);
+          cnt++;
+        }
+        assertEquals(retArray1.length, cnt);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void withoutAllNullTest5() {
+    String[] retArray1 = new String[] {"6,root.testWithoutAllNull.d1,20,true,null"};
+    try (Connection connection =
+        DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+        Statement statement = connection.createStatement()) {
+      boolean hasResultSet =
+          statement.execute(
+              "select last_value(*) from root.testWithoutAllNull.d1 GROUP BY([1, 21), 5ms) ORDER BY TIME DESC WITHOUT NULL ALL LIMIT 1 OFFSET 1 ALIGN BY DEVICE");
+
+      assertTrue(hasResultSet);
+      int cnt;
+      try (ResultSet resultSet = statement.getResultSet()) {
+        cnt = 0;
+        while (resultSet.next()) {
+          String ans =
+              resultSet.getString(TIMESTAMP_STR)
+                  + ","
+                  + resultSet.getString("Device")
+                  +","
+                  + resultSet.getString("last_value(s1)")
+                  + ","
+                  + resultSet.getString("last_value(s2)")
+                  + ","
+                  + resultSet.getString("last_value(s3)");
+          assertEquals(retArray1[cnt], ans);
+          cnt++;
+        }
+        assertEquals(retArray1.length, cnt);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/RowRecord.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/RowRecord.java
index 4365732..df0c051 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/RowRecord.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/RowRecord.java
@@ -94,4 +94,9 @@ public class RowRecord {
   public boolean isAllNull() {
     return allNull;
   }
+
+  public void resetNullFlag() {
+    hasNullField = false;
+    allNull = true;
+  }
 }