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 <[email protected]>
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());

Reply via email to