You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/12/15 14:38:12 UTC
[iotdb] 02/04: refactor analyze showTimeSeries
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/modifySchemaTreeInterface
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 60fd739e23b3b4bdc1b340fd5a8fac946b04d025
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Thu Dec 15 19:27:40 2022 +0800
refactor analyze showTimeSeries
---
.../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 44 ++++++++--------------
1 file changed, 16 insertions(+), 28 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index 5a7f1ef40e..469c6b5f6a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -230,7 +230,12 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
throw new SemanticException("Only time filters are supported in LAST query");
}
analyzeOrderBy(analysis, queryStatement);
- analyzeLastSource(analysis, queryStatement, schemaTree);
+
+ List<Expression> selectExpressions = new ArrayList<>();
+ for (ResultColumn resultColumn : queryStatement.getSelectComponent().getResultColumns()) {
+ selectExpressions.add(resultColumn.getExpression());
+ }
+ analyzeLastSource(analysis, selectExpressions, schemaTree);
analysis.setRespDatasetHeader(DatasetHeaderFactory.getLastQueryHeader());
@@ -337,7 +342,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
}
private void analyzeLastSource(
- Analysis analysis, QueryStatement queryStatement, ISchemaTree schemaTree) {
+ Analysis analysis, List<Expression> selectExpressions, ISchemaTree schemaTree) {
Set<Expression> sourceExpressions;
List<SortItem> sortItemList = analysis.getMergeOrderParameter().getSortItemList();
@@ -356,9 +361,9 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
sourceExpressions = new LinkedHashSet<>();
}
- for (ResultColumn resultColumn : queryStatement.getSelectComponent().getResultColumns()) {
+ for (Expression selectExpression : selectExpressions) {
sourceExpressions.addAll(
- ExpressionAnalyzer.removeWildcardInExpression(resultColumn.getExpression(), schemaTree));
+ ExpressionAnalyzer.removeWildcardInExpression(selectExpression, schemaTree));
}
analysis.setSourceExpressions(sourceExpressions);
}
@@ -732,9 +737,6 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
if (analysis.hasValueFilter()) {
throw new SemanticException("Only time filters are supported in GROUP BY TAGS query");
}
- if (queryStatement.hasHaving()) {
- throw new SemanticException("Having clause is not supported yet in GROUP BY TAGS query");
- }
Map<List<String>, LinkedHashMap<Expression, List<Expression>>>
tagValuesToGroupedTimeseriesOperands = new HashMap<>();
LinkedHashMap<Expression, Set<Expression>> groupByTagOutputExpressions = new LinkedHashMap<>();
@@ -2067,27 +2069,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
logger.debug("[StartFetchSchema]");
ISchemaTree schemaTree = schemaFetcher.fetchSchema(patternTree);
logger.debug("[EndFetchSchema]]");
- List<MeasurementPath> allSelectedPath = schemaTree.getAllMeasurement();
-
- Set<Expression> sourceExpressions =
- allSelectedPath.stream()
- .map(TimeSeriesOperand::new)
- .collect(Collectors.toCollection(LinkedHashSet::new));
- analysis.setSourceExpressions(sourceExpressions);
- sourceExpressions.forEach(expression -> analyzeExpression(analysis, expression));
-
- Set<String> deviceSet =
- allSelectedPath.stream().map(MeasurementPath::getDevice).collect(Collectors.toSet());
- Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap = new HashMap<>();
- for (String devicePath : deviceSet) {
- DataPartitionQueryParam queryParam = new DataPartitionQueryParam();
- queryParam.setDevicePath(devicePath);
- sgNameToQueryParamsMap
- .computeIfAbsent(schemaTree.getBelongedDatabase(devicePath), key -> new ArrayList<>())
- .add(queryParam);
- }
- DataPartition dataPartition = partitionFetcher.getDataPartition(sgNameToQueryParamsMap);
- analysis.setDataPartitionInfo(dataPartition);
+
+ analyzeLastSource(
+ analysis,
+ Collections.singletonList(
+ new TimeSeriesOperand(showTimeSeriesStatement.getPathPattern())),
+ schemaTree);
+ analyzeDataPartition(analysis, new QueryStatement(), schemaTree);
}
analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowTimeSeriesHeader());