This is an automated email from the ASF dual-hosted git repository.

chenyz pushed a commit to branch udtf-optimize
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d734b704d3686e1a3deab56e4eb933ea77fd612c
Author: Chen YZ <[email protected]>
AuthorDate: Sun Feb 23 22:29:53 2025 +0800

    save
---
 .../rule/PruneTableFunctionProcessorColumns.java   |  1 +
 .../PruneTableFunctionProcessorSourceColumns.java  |  1 +
 .../planner/node/SortBasedGroupNode.java           |  6 ++---
 .../planner/optimizations/ParallelizeGrouping.java | 30 +++++++++++-----------
 4 files changed, 20 insertions(+), 18 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java
index 1e69fce28d3..9feefcea2d7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java
@@ -83,6 +83,7 @@ public class PruneTableFunctionProcessorColumns
             prunedPassThroughSpecifications,
             node.getRequiredSymbols(),
             node.getDataOrganizationSpecification(),
+            node.isRowSemantic(),
             node.getArguments()));
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java
index dca9f28a15c..f2d6d5a528b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java
@@ -91,6 +91,7 @@ public class PruneTableFunctionProcessorSourceColumns 
implements Rule<TableFunct
                         node.getPassThroughSpecification(),
                         node.getRequiredSymbols(),
                         node.getDataOrganizationSpecification(),
+                        node.isRowSemantic(),
                         node.getArguments())))
         .orElse(Result.empty());
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java
index 77bc98e454c..f3d3affad0e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java
@@ -38,15 +38,15 @@ import java.util.List;
  * based on SortNode. It will only be generated some special node that 
required grouping source,
  * such as FillNode and TableFunctionNode.
  *
- * <p>SortBasedGroupNode's ordering schema consists of two parts: PartitionKey 
and SortKey. It
- * guarantees to return data grouped by PartitionKey and sorted by SortKey. 
For example, PARTITION
+ * <p>SortBasedGroupNode's ordering schema consists of two parts: PartitionKey 
and OrderKey. It
+ * guarantees to return data grouped by PartitionKey and sorted by OrderKey. 
For example, PARTITION
  * BY device_id ORDER BY time will return data grouped by device_id, and in 
each group, data will be
  * sorted by time.
  */
 public class SortBasedGroupNode extends SortNode {
 
   /**
-   * orderingScheme may include two parts: PartitionKey and SortKey. It marks 
the number of
+   * orderingScheme may include two parts: PartitionKey and OrderKey. It marks 
the number of
    * PartitionKey.
    */
   private int partitionKeyCount;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java
index bb5f04350da..48207824795 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java
@@ -120,7 +120,7 @@ public class ParallelizeGrouping implements PlanOptimizer {
       if (context.canSkip()) {
         return;
       }
-      OrderingScheme prefix = context.orderKey;
+      OrderingScheme prefix = context.sortKey;
       if (prefix.getOrderBy().size() != context.partitionKeyCount) {
         context.canParalleled = UNABLE;
         return;
@@ -210,9 +210,9 @@ public class ParallelizeGrouping implements PlanOptimizer {
     @Override
     public PlanNode visitProject(ProjectNode node, Context context) {
       if (!context.canSkip()) {
-        OrderingScheme orderKey = context.orderKey;
-        for (int i = 0; i < orderKey.getOrderBy().size(); i++) {
-          if (!node.getAssignments().contains(orderKey.getOrderBy().get(i))) {
+        OrderingScheme sortKey = context.sortKey;
+        for (int i = 0; i < sortKey.getOrderBy().size(); i++) {
+          if (!node.getAssignments().contains(sortKey.getOrderBy().get(i))) {
             context.canParalleled = UNABLE;
             break;
           }
@@ -224,29 +224,29 @@ public class ParallelizeGrouping implements PlanOptimizer 
{
     @Override
     public PlanNode visitDeviceTableScan(DeviceTableScanNode node, Context 
context) {
       if (!context.canSkip()) {
-        OrderingScheme orderKey = context.orderKey;
+        OrderingScheme sortKey = context.sortKey;
         Map<Symbol, ColumnSchema> tableColumnSchema =
             analysis.getTableColumnSchema(node.getQualifiedObjectName());
         // 1. It is possible for the last sort key to be a time column
-        if (orderKey.getOrderBy().size() > context.partitionKeyCount + 1) {
+        if (sortKey.getOrderBy().size() > context.partitionKeyCount + 1) {
           context.canParalleled = UNABLE;
           return node;
-        } else if (orderKey.getOrderBy().size() == context.partitionKeyCount + 
1) {
-          Symbol lastSymbol = 
orderKey.getOrderBy().get(context.partitionKeyCount);
+        } else if (sortKey.getOrderBy().size() == context.partitionKeyCount + 
1) {
+          Symbol lastSymbol = 
sortKey.getOrderBy().get(context.partitionKeyCount);
           if (!tableColumnSchema.containsKey(lastSymbol)
               || tableColumnSchema.get(lastSymbol).getColumnCategory() != 
TIME) {
             context.canParalleled = UNABLE;
             return node;
           }
         }
-        // 2. check there are no field in orderKey and all tags in orderKey
+        // 2. check there are no field in sortKey and all tags in sortKey
         Set<Symbol> tagSymbols =
             tableColumnSchema.entrySet().stream()
                 .filter(entry -> entry.getValue().getColumnCategory() == TAG)
                 .map(Map.Entry::getKey)
                 .collect(Collectors.toSet());
         for (int i = 0; i < context.partitionKeyCount; i++) {
-          Symbol symbol = orderKey.getOrderBy().get(i);
+          Symbol symbol = sortKey.getOrderBy().get(i);
           if (!tableColumnSchema.containsKey(symbol)) {
             context.canParalleled = UNABLE;
             return node;
@@ -286,17 +286,17 @@ public class ParallelizeGrouping implements PlanOptimizer 
{
   }
 
   private static class Context {
-    private final OrderingScheme orderKey;
+    private final OrderingScheme sortKey;
     private final int partitionKeyCount;
     private CanParalleled canParalleled = PENDING;
 
-    private Context(OrderingScheme orderKey, int sortKeyOffset) {
-      this.orderKey = orderKey;
-      this.partitionKeyCount = sortKeyOffset;
+    private Context(OrderingScheme sortKey, int partitionKeyCount) {
+      this.sortKey = sortKey;
+      this.partitionKeyCount = partitionKeyCount;
     }
 
     private boolean canSkip() {
-      return orderKey == null || canParalleled != PENDING;
+      return sortKey == null || canParalleled != PENDING;
     }
   }
 

Reply via email to