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
