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 08:01:37 UTC

[iotdb] branch WithoutNullBug12 created (now fa611b0)

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

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


      at fa611b0  fix limit bug

This branch includes the following new commits:

     new 6221a16  Fix Without Null ALL doesn't take effect in align by device clause
     new b2070e3  format code
     new fa611b0  fix limit bug

The 3 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/03: 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 WithoutNullBug12
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 6221a166ea128f5303e310fa7dbcc0e8a695f3c7
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 b37a16e..f1e396a 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
@@ -235,6 +235,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 ba41702..e45bc4e 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
@@ -98,4 +98,9 @@ public class RowRecord {
   public boolean isAllNull() {
     return allNull;
   }
+
+  public void resetNullFlag() {
+    hasNullField = false;
+    allNull = true;
+  }
 }

[iotdb] 03/03: fix limit bug

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

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

commit fa611b01c8b2ab16b1bbb89e594745c3e04db30d
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Fri May 21 15:53:21 2021 +0800

    fix limit bug
---
 server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java | 1 +
 .../java/org/apache/iotdb/tsfile/read/query/dataset/QueryDataSet.java | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
index a88b074..3164375 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
@@ -70,6 +70,7 @@ public class QueryDataSetUtils {
         // filter rows whose columns are null according to the rule
         if ((queryDataSet.isWithoutAllNull() && rowRecord.isAllNull())
             || (queryDataSet.isWithoutAnyNull() && rowRecord.hasNullField())) {
+          queryDataSet.decreaseAlreadyReturnedRowNum();
           i--;
           continue;
         }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/QueryDataSet.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/QueryDataSet.java
index c782743..0aaed56 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/QueryDataSet.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/QueryDataSet.java
@@ -194,4 +194,8 @@ public abstract class QueryDataSet {
   public void setWithoutAllNull(boolean withoutAllNull) {
     this.withoutAllNull = withoutAllNull;
   }
+
+  public void decreaseAlreadyReturnedRowNum() {
+    alreadyReturnedRowNum--;
+  }
 }

[iotdb] 02/03: format code

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

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

commit b2070e3942438b5d8fa670ae517e68817581d7b5
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Fri May 21 15:34:48 2021 +0800

    format code
---
 .../db/integration/IoTDBWithoutAllNullIT.java      | 28 ++++++++++++----------
 1 file changed, 15 insertions(+), 13 deletions(-)

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 100cec5..b8efe89 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,22 +18,24 @@
  */
 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 =
@@ -192,7 +194,7 @@ public class IoTDBWithoutAllNullIT {
   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");
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
@@ -207,7 +209,7 @@ public class IoTDBWithoutAllNullIT {
               resultSet.getString(TIMESTAMP_STR)
                   + ","
                   + resultSet.getString("Device")
-                  +","
+                  + ","
                   + resultSet.getString("last_value(s1)")
                   + ","
                   + resultSet.getString("last_value(s2)")
@@ -228,7 +230,7 @@ public class IoTDBWithoutAllNullIT {
   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");
+            DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
       boolean hasResultSet =
           statement.execute(
@@ -243,7 +245,7 @@ public class IoTDBWithoutAllNullIT {
               resultSet.getString(TIMESTAMP_STR)
                   + ","
                   + resultSet.getString("Device")
-                  +","
+                  + ","
                   + resultSet.getString("last_value(s1)")
                   + ","
                   + resultSet.getString("last_value(s2)")