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

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


The following commit(s) were added to refs/heads/beyyes/multi_devices_fe by 
this push:
     new c56979fe171 fix analyzeSelect - analyzeExpressionTypes
c56979fe171 is described below

commit c56979fe171a6430589ebb90657d3a397f0f279f
Author: Beyyes <[email protected]>
AuthorDate: Mon Nov 6 21:58:25 2023 +0800

    fix analyzeSelect - analyzeExpressionTypes
---
 .../apache/iotdb/db/queryengine/plan/analyze/Analysis.java | 11 +++++++++--
 .../queryengine/plan/analyze/ExpressionTypeAnalyzer.java   |  9 +++++++++
 .../queryengine/plan/analyze/TemplatedDeviceAnalyze.java   | 14 ++++++++------
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
index fcb14e4626c..fd13b2a89f3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
@@ -32,6 +32,7 @@ import 
org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.common.schematree.ISchemaTree;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import org.apache.iotdb.db.queryengine.plan.expression.ExpressionType;
+import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.FillDescriptor;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.GroupByParameter;
@@ -357,8 +358,10 @@ public class Analysis {
       return null;
     }
 
-    // TODO add template optimization
-    // expression.get
+    if (templateTypes != null) {
+      TimeSeriesOperand seriesOperand = (TimeSeriesOperand) expression;
+      return 
templateTypes.getSchemaMap().get(seriesOperand.getPath().getMeasurement()).getType();
+    }
 
     TSDataType type = expressionTypes.get(NodeRef.of(expression));
     checkArgument(type != null, "Expression is not analyzed: %s", expression);
@@ -686,6 +689,10 @@ public class Analysis {
     return this.templateTypes;
   }
 
+  public void setTemplateTypes(Template template) {
+    this.templateTypes = template;
+  }
+
   public void setOrderByExpressions(Set<Expression> orderByExpressions) {
     this.orderByExpressions = orderByExpressions;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
index 18eb59894b7..343122e12bf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ExpressionTypeAnalyzer.java
@@ -59,6 +59,15 @@ public class ExpressionTypeAnalyzer {
   private ExpressionTypeAnalyzer() {}
 
   public static TSDataType analyzeExpression(Analysis analysis, Expression 
expression) {
+    if (analysis.getTemplateTypes() != null) {
+      TimeSeriesOperand seriesOperand = (TimeSeriesOperand) expression;
+      return analysis
+          .getTemplateTypes()
+          .getSchemaMap()
+          .get(seriesOperand.getPath().getMeasurement())
+          .getType();
+    }
+
     if (!analysis.getExpressionTypes().containsKey(NodeRef.of(expression))) {
       ExpressionTypeAnalyzer analyzer = new ExpressionTypeAnalyzer();
       analyzer.analyze(expression);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedDeviceAnalyze.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedDeviceAnalyze.java
index fc5cd296c75..bdb421c47d7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedDeviceAnalyze.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedDeviceAnalyze.java
@@ -74,7 +74,6 @@ import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer.ge
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer.normalizeExpression;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer.searchAggregationExpressions;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer.searchSourceExpressions;
-import static 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionTypeAnalyzer.analyzeExpression;
 import static 
org.apache.iotdb.db.queryengine.plan.optimization.LimitOffsetPushDown.canPushDownLimitOffsetInGroupByTimeForDevice;
 import static 
org.apache.iotdb.db.queryengine.plan.optimization.LimitOffsetPushDown.pushDownLimitOffsetInGroupByTimeForDevice;
 
@@ -125,6 +124,10 @@ public class TemplatedDeviceAnalyze {
                   .get(0)
                   .getExpression()
                   .getOutputSymbol())) {
+
+        Template template = 
ClusterTemplateManager.getInstance().getAllTemplates().get(0);
+        analysis.setTemplateTypes(template);
+
         isWildCardQuery = true;
       }
     }
@@ -279,18 +282,17 @@ public class TemplatedDeviceAnalyze {
       ISchemaTree schemaTree,
       List<PartialPath> deviceList) {
 
-    Template template = 
ClusterTemplateManager.getInstance().getAllTemplates().get(0);
-
     List<Pair<Expression, String>> outputExpressions = new ArrayList<>();
     Map<String, Set<Expression>> deviceToSelectExpressions = new HashMap<>();
 
-    for (Map.Entry<String, IMeasurementSchema> entry : 
template.getSchemaMap().entrySet()) {
+    for (Map.Entry<String, IMeasurementSchema> entry :
+        analysis.getTemplateTypes().getSchemaMap().entrySet()) {
       String measurementName = entry.getKey();
       IMeasurementSchema measurementSchema = entry.getValue();
       TimeSeriesOperand measurementPath =
           new TimeSeriesOperand(
               new MeasurementPath(new String[] {measurementName}, 
measurementSchema));
-      analyzeExpression(analysis, measurementPath);
+      // analyzeExpression(analysis, measurementPath);
       outputExpressions.add(new Pair<>(measurementPath, null));
       for (PartialPath devicePath : deviceList) {
         // TODO how to determine whether a device is aligned device
@@ -298,7 +300,7 @@ public class TemplatedDeviceAnalyze {
             new TimeSeriesOperand(
                 new MeasurementPath(
                     devicePath.concatNode(measurementName), measurementSchema, 
true));
-        analyzeExpression(analysis, fullPath);
+        // analyzeExpression(analysis, fullPath);
         deviceToSelectExpressions
             .computeIfAbsent(devicePath.getFullPath(), k -> new 
LinkedHashSet<>())
             .add(fullPath);

Reply via email to