You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2024/10/14 02:11:11 UTC
(iotdb) 01/01: add group by all id test
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch agg_table_scan_groupby
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 8eb542898175a8b4d36e65d17e4909e080e831c9
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Mon Oct 14 10:10:53 2024 +0800
add group by all id test
---
.../db/it/IoTDBMultiIDsWithAttributesTableIT.java | 35 ++++++++++++++++++++++
.../TableAggregationTableScanOperator.java | 12 +++++---
2 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
index 8933d848159..b62ea9bbed8 100644
--- a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
@@ -605,6 +605,41 @@ public class IoTDBMultiIDsWithAttributesTableIT {
// TODO select count(*),count(t1) from (select avg(num+1) as t1 from table0) where time < 0
}
+ @Test
+ public void groupByAggregationTest() {
+ expectedHeader =
+ new String[] {
+ "device",
+ "level",
+ "count_num",
+ "count_star",
+ "count_device",
+ "count_date",
+ "count_attr1",
+ "count_attr2",
+ "count_time"
+ };
+ retArray =
+ new String[] {
+ "d1,l1,3,3,3,0,3,3,3,",
+ "d1,l2,3,3,3,0,3,3,3,",
+ "d1,l3,3,3,3,0,3,3,3,",
+ "d1,l4,3,3,3,0,0,0,3,",
+ "d1,l5,3,3,3,1,0,0,3,",
+ "d2,l1,3,3,3,0,3,3,3,",
+ "d2,l2,3,3,3,0,3,0,3,",
+ "d2,l3,3,3,3,0,0,0,3,",
+ "d2,l4,3,3,3,0,0,0,3,",
+ "d2,l5,3,3,3,1,0,0,3,",
+ };
+ String sql =
+ "select device, level, "
+ + "count(num) as count_num, count(*) as count_star, count(device) as count_device, count(date) as count_date, "
+ + "count(attr1) as count_attr1, count(attr2) as count_attr2, count(time) as count_time "
+ + "from table0 group by device,level order by device, level";
+ tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
+ }
+
// ============================ Join Test ===========================
// no filter
@Test
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableAggregationTableScanOperator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableAggregationTableScanOperator.java
index 1718f460e58..3b3700479d6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableAggregationTableScanOperator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableAggregationTableScanOperator.java
@@ -616,7 +616,7 @@ public class TableAggregationTableScanOperator extends AbstractSeriesAggregation
(groupingKeyIndex != null ? groupingKeyIndex.length : 0) + tableAggregators.size());
if (groupingKeyIndex != null) {
for (int i = 0; i < groupingKeyIndex.length; i++) {
- resultDataTypes.add(TSDataType.TEXT);
+ resultDataTypes.add(TSDataType.STRING);
}
}
@@ -636,8 +636,12 @@ public class TableAggregationTableScanOperator extends AbstractSeriesAggregation
for (int i = 0; i < groupingKeyIndex.length; i++) {
if (TsTableColumnCategory.ID == groupingKeySchemas.get(i).getColumnCategory()) {
columnBuilders[i].writeBinary(
- (Binary)
- deviceEntries.get(currentDeviceIndex).getNthSegment(groupingKeyIndex[i] + 1));
+ new Binary(
+ ((String)
+ deviceEntries
+ .get(currentDeviceIndex)
+ .getNthSegment(groupingKeyIndex[i] + 1))
+ .getBytes()));
} else {
columnBuilders[i].writeBinary(
new Binary(
@@ -653,7 +657,7 @@ public class TableAggregationTableScanOperator extends AbstractSeriesAggregation
int groupKeyLength = groupingKeyIndex == null ? 0 : groupingKeyIndex.length;
for (int i = 0; i < aggregators.size(); i++) {
- aggregators.get(groupKeyLength + i).evaluate(columnBuilders[groupKeyLength + i]);
+ aggregators.get(i).evaluate(columnBuilders[groupKeyLength + i]);
}
tsBlockBuilder.declarePosition();