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/09/05 10:26:29 UTC
[iotdb] 02/04: add typeMap in Analysis
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 <li...@foxmail.com>
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