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