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:29 UTC
[iotdb] 01/01: Fix Without Null ALL doesn't take effect in align by
device clause
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;
+ }
}