This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TyGroupByBug in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit ee50dd61e4af05cd22146f188e7bc55c2a403e4b Author: JackieTien97 <[email protected]> AuthorDate: Sat May 9 09:51:15 2020 +0800 group by fill non type bug --- .../main/java/org/apache/iotdb/SessionExample.java | 20 ++++---- server/src/assembly/resources/conf/logback.xml | 2 +- .../iotdb/db/qp/strategy/LogicalGenerator.java | 2 + .../query/dataset/groupby/GroupByFillDataSet.java | 3 +- .../iotdb/db/integration/IoTDBGroupByFillIT.java | 60 ++++++++++++++++++---- 5 files changed, 66 insertions(+), 21 deletions(-) diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java b/example/session/src/main/java/org/apache/iotdb/SessionExample.java index 57d0a64..1bfca71 100644 --- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java +++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java @@ -51,17 +51,17 @@ public class SessionExample { } } - createTimeseries(); - createMultiTimeseries(); - insertRecord(); - insertTablet(); - insertTablets(); - insertRecords(); - nonQuery(); +// createTimeseries(); +// createMultiTimeseries(); +// insertRecord(); +// insertTablet(); +// insertTablets(); +// insertRecords(); +// nonQuery(); query(); - queryByIterator(); - deleteData(); - deleteTimeseries(); +// queryByIterator(); +// deleteData(); +// deleteTimeseries(); session.close(); } diff --git a/server/src/assembly/resources/conf/logback.xml b/server/src/assembly/resources/conf/logback.xml index fc8a179..ac625a2 100644 --- a/server/src/assembly/resources/conf/logback.xml +++ b/server/src/assembly/resources/conf/logback.xml @@ -170,7 +170,7 @@ <level>INFO</level> </filter> </appender> - <root level="info"> + <root level="debug"> <appender-ref ref="FILEDEBUG"/> <appender-ref ref="FILEWARN"/> <appender-ref ref="FILEERROR"/> diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java index e3a7cee..293ce4e 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java @@ -696,6 +696,8 @@ public class LogicalGenerator extends SqlBaseBaseListener { parseTypeClause(typeClause, fillTypes); } } + + queryOp.setFill(true); queryOp.setFillTypes(fillTypes); } diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSet.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSet.java index ee6f867..c751b14 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSet.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSet.java @@ -105,7 +105,8 @@ public class GroupByFillDataSet extends QueryDataSet { // the previous value is not null and // (fill type is not previous until last or now time is before last time) if (previousValue[i] != null - && (!((PreviousFill) fillTypes.get(dataTypes.get(i))).isUntilLast() + && ((fillTypes.containsKey(dataTypes.get(i)) && !((PreviousFill) fillTypes + .get(dataTypes.get(i))).isUntilLast()) || rowRecord.getTimestamp() <= lastTimeArray[i])) { rowRecord.getFields().set(i, Field.getField(previousValue[i], dataTypes.get(i))); } diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java index 039dd56..68d6930 100644 --- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java +++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java @@ -18,6 +18,16 @@ */ package org.apache.iotdb.db.integration; +import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR; +import static org.apache.iotdb.db.constant.TestConstant.last_value; +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; @@ -26,15 +36,6 @@ import org.junit.After; import org.junit.Before; 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.apache.iotdb.db.constant.TestConstant.last_value; -import static org.junit.Assert.*; - public class IoTDBGroupByFillIT { private static String[] dataSet1 = new String[]{ @@ -445,6 +446,47 @@ public class IoTDBGroupByFillIT { } @Test + public void previousUntilLastTest5() { + String[] retArray = new String[] { + "17,25", + "22,25", + "27,26", + "32,29", + "37,40", + "42,null", + "47,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(temperature) from " + + "root.ln.wf01.wt01 " + + "GROUP BY ([17, 48), 5ms) FILL(float[previousUntilLast])"); + + assertTrue(hasResultSet); + int cnt; + try (ResultSet resultSet = statement.getResultSet()) { + cnt = 0; + while (resultSet.next()) { + String ans = resultSet.getString(TIMESTAMP_STR) + "," + resultSet + .getString(last_value("root.ln.wf01.wt01.temperature")); + assertEquals(retArray[cnt], ans); + cnt++; + } + assertEquals(retArray.length, cnt); + } + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + + } + + + @Test public void leftORightCPreviousUntilLastTest() { String[] retArray = new String[] { "9,null",
