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

hui pushed a commit to branch lmh/TypeProviderOpt
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3b7ea9ac83c015e839d7bcd2c129d3083316c57b
Author: Minghui Liu <[email protected]>
AuthorDate: Thu Sep 1 15:53:13 2022 +0800

    add typeMap in Analysis
---
 .../java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java  | 12 ++++++++++++
 .../org/apache/iotdb/db/mpp/plan/expression/Expression.java  |  3 ++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
index 6f9a65ee28..ae27b02122 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.partition.SchemaPartition;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.metadata.template.Template;
+import org.apache.iotdb.db.mpp.common.NodeRef;
 import org.apache.iotdb.db.mpp.common.header.DatasetHeader;
 import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
@@ -32,13 +33,17 @@ import 
org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor;
 import 
org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByTimeParameter;
 import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.OrderByParameter;
 import org.apache.iotdb.db.mpp.plan.statement.Statement;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.utils.Pair;
 
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /** Analysis used for planning a query. TODO: This class may need to store 
more info for a query. */
 public class Analysis {
 
@@ -59,6 +64,7 @@ public class Analysis {
   private ISchemaTree schemaTree;
 
   // map from output column name (for every node) to its datatype
+  private final Map<NodeRef<Expression>, TSDataType> expressionTypes = new 
LinkedHashMap<>();
   private TypeProvider typeProvider;
 
   private boolean finishQueryAfterAnalyze;
@@ -225,6 +231,12 @@ public class Analysis {
     this.typeProvider = typeProvider;
   }
 
+  public TSDataType getType(Expression expression) {
+    TSDataType type = expressionTypes.get(NodeRef.of(expression));
+    checkArgument(type != null, "Expression not analyzed: %s", expression);
+    return type;
+  }
+
   public boolean hasDataSource() {
     return (dataPartition != null && !dataPartition.isEmpty())
         || (schemaPartition != null && !schemaPartition.isEmpty());
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
index 59bb10c7b3..28d87a8ba2 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
@@ -49,6 +49,7 @@ import 
org.apache.iotdb.db.mpp.plan.expression.unary.NegationExpression;
 import org.apache.iotdb.db.mpp.plan.expression.unary.RegularExpression;
 import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
 import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
+import org.apache.iotdb.db.mpp.plan.statement.StatementNode;
 import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
 import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
 import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
@@ -68,7 +69,7 @@ import java.util.Map;
 import java.util.Set;
 
 /** A skeleton class for expression */
-public abstract class Expression {
+public abstract class Expression extends StatementNode {
 
   
/////////////////////////////////////////////////////////////////////////////////////////////////
   // Operations that Class Expression is not responsible for should be done 
through a visitor

Reply via email to