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 2020/05/09 01:51:52 UTC
[incubator-iotdb] 01/01: group by fill non type bug
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 <Ja...@foxmail.com>
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",