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();