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

caogaofei pushed a commit to branch beyyes/rel-1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/beyyes/rel-1.2 by this push:
     new 95407d650aa fix the data scan ordering when executing last query
95407d650aa is described below

commit 95407d650aac5e9c557281aa76c0c0f885db1dd8
Author: Beyyes <[email protected]>
AuthorDate: Wed Sep 27 14:20:45 2023 +0800

    fix the data scan ordering when executing last query
---
 .../plan/planner/LogicalPlanBuilder.java           | 83 ++++++++++++----------
 .../plan/planner/LogicalPlanVisitor.java           |  5 +-
 2 files changed, 46 insertions(+), 42 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 42eb082ea5f..99810f3c118 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -221,7 +221,7 @@ public class LogicalPlanBuilder {
   }
 
   public LogicalPlanBuilder planLast(
-      Analysis analysis, Ordering timeseriesOrdering, Ordering 
resultTimeOrder, ZoneId zoneId) {
+      Analysis analysis, Ordering timeseriesOrdering, ZoneId zoneId) {
     Set<String> deviceAlignedSet = new HashSet<>();
     Set<String> deviceExistViewSet = new HashSet<>();
     // <Device, <Measurement, Expression>>
@@ -304,6 +304,46 @@ public class LogicalPlanBuilder {
       }
     }
 
+    processLastQueryTransformNode(analysis, sourceNodeList, zoneId);
+
+    if (timeseriesOrdering != null) {
+      sourceNodeList.sort(
+          Comparator.comparing(
+              child -> {
+                String sortKey = "";
+                if (child instanceof LastQueryScanNode) {
+                  sortKey = ((LastQueryScanNode) 
child).getOutputSymbolForSort();
+                } else if (child instanceof AlignedLastQueryScanNode) {
+                  sortKey = ((AlignedLastQueryScanNode) 
child).getOutputSymbolForSort();
+                } else if (child instanceof LastQueryTransformNode) {
+                  sortKey = ((LastQueryTransformNode) 
child).getOutputSymbolForSort();
+                }
+                return sortKey;
+              }));
+      if (timeseriesOrdering.equals(Ordering.DESC)) {
+        Collections.reverse(sourceNodeList);
+      }
+    }
+
+    this.root =
+        new LastQueryNode(
+            context.getQueryId().genPlanNodeId(),
+            sourceNodeList,
+            analysis.getGlobalTimeFilter(),
+            timeseriesOrdering,
+            analysis.getLastQueryNonWritableViewExpressions() != null);
+
+    ColumnHeaderConstant.lastQueryColumnHeaders.forEach(
+        columnHeader ->
+            context
+                .getTypeProvider()
+                .setType(columnHeader.getColumnName(), 
columnHeader.getColumnType()));
+
+    return this;
+  }
+
+  private void processLastQueryTransformNode(
+      Analysis analysis, List<PlanNode> sourceNodeList, ZoneId zoneId) {
     Set<Expression> lastQueryNonWriteViewExpressions =
         analysis.getLastQueryNonWritableViewExpressions();
     Map<Expression, List<Expression>> 
lastQueryNonWritableViewSourceExpressionMap =
@@ -328,11 +368,11 @@ public class LogicalPlanBuilder {
             planBuilder
                 .planRawDataSource(
                     sources,
-                    resultTimeOrder,
+                    Ordering.DESC,
                     analysis.getGlobalTimeFilter(),
                     analysis.isLastLevelUseWildcard())
                 .planWhereAndSourceTransform(
-                    null, sourceTransformExpressions, false, zoneId, 
resultTimeOrder)
+                    null, sourceTransformExpressions, false, zoneId, 
Ordering.DESC)
                 .planAggregation(
                     new LinkedHashSet<>(Arrays.asList(maxTimeAgg, 
lastValueAgg)),
                     null,
@@ -340,7 +380,7 @@ public class LogicalPlanBuilder {
                     analysis.getGroupByParameter(),
                     false,
                     AggregationStep.SINGLE,
-                    resultTimeOrder);
+                    Ordering.DESC);
 
         LastQueryTransformNode transformNode =
             new LastQueryTransformNode(
@@ -351,41 +391,6 @@ public class LogicalPlanBuilder {
         sourceNodeList.add(transformNode);
       }
     }
-
-    if (timeseriesOrdering != null) {
-      sourceNodeList.sort(
-          Comparator.comparing(
-              child -> {
-                String sortKey = "";
-                if (child instanceof LastQueryScanNode) {
-                  sortKey = ((LastQueryScanNode) 
child).getOutputSymbolForSort();
-                } else if (child instanceof AlignedLastQueryScanNode) {
-                  sortKey = ((AlignedLastQueryScanNode) 
child).getOutputSymbolForSort();
-                } else if (child instanceof LastQueryTransformNode) {
-                  sortKey = ((LastQueryTransformNode) 
child).getOutputSymbolForSort();
-                }
-                return sortKey;
-              }));
-      if (timeseriesOrdering.equals(Ordering.DESC)) {
-        Collections.reverse(sourceNodeList);
-      }
-    }
-
-    this.root =
-        new LastQueryNode(
-            context.getQueryId().genPlanNodeId(),
-            sourceNodeList,
-            analysis.getGlobalTimeFilter(),
-            timeseriesOrdering,
-            lastQueryNonWriteViewExpressions != null);
-
-    ColumnHeaderConstant.lastQueryColumnHeaders.forEach(
-        columnHeader ->
-            context
-                .getTypeProvider()
-                .setType(columnHeader.getColumnName(), 
columnHeader.getColumnType()));
-
-    return this;
   }
 
   public LogicalPlanBuilder planAggregationSource(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
index 68fd72004de..9a2d72dda40 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
@@ -100,7 +100,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import static 
org.apache.iotdb.db.queryengine.plan.statement.component.Ordering.ASC;
 import static org.apache.iotdb.db.utils.constant.SqlConstant.COUNT_TIME;
 
 /**
@@ -131,7 +130,6 @@ public class LogicalPlanVisitor extends 
StatementVisitor<PlanNode, MPPQueryConte
               .planLast(
                   analysis,
                   analysis.getTimeseriesOrderingForLastQuery(),
-                  queryStatement.getResultTimeOrder(),
                   queryStatement.getSelectComponent().getZoneId())
               .planOffset(queryStatement.getRowOffset())
               .planLimit(queryStatement.getRowLimit());
@@ -596,13 +594,14 @@ public class LogicalPlanVisitor extends 
StatementVisitor<PlanNode, MPPQueryConte
                 showTimeSeriesStatement.isPrefixPath(),
                 analysis.getRelatedTemplateInfo())
             .planSchemaQueryMerge(showTimeSeriesStatement.isOrderByHeat());
+
     // show latest timeseries
     if (showTimeSeriesStatement.isOrderByHeat()
         && null != analysis.getDataPartitionInfo()
         && 0 != analysis.getDataPartitionInfo().getDataPartitionMap().size()) {
       PlanNode lastPlanNode =
           new LogicalPlanBuilder(analysis, context)
-              .planLast(analysis, null, ASC, ZoneId.systemDefault())
+              .planLast(analysis, null, ZoneId.systemDefault())
               .getRoot();
       planBuilder = planBuilder.planSchemaQueryOrderByHeat(lastPlanNode);
     }

Reply via email to