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