This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/ty/TableModelGrammar by this
push:
new 3b805e00dd8 fix typeprovider
new 68c8fc0568b Merge branch 'ty/TableModelGrammar' of
github.com:apache/iotdb into ty/TableModelGrammar
3b805e00dd8 is described below
commit 3b805e00dd82dff82abe0a8626d26c383369555e
Author: Beyyes <[email protected]>
AuthorDate: Thu Apr 18 10:14:53 2024 +0800
fix typeprovider
---
.../db/queryengine/plan/analyze/TypeProvider.java | 12 +++-
.../plan/planner/plan/PlanFragment.java | 5 ++
.../relational/analyzer/ExpressionAnalyzer.java | 2 +-
.../distribute/FragmentInstanceGenerator.java | 2 +-
.../TableModelTypeProviderExtractor.java | 64 ++++++++++++++++++++++
.../plan/relational/planner/node/ProjectNode.java | 4 ++
.../plan/relational/analyzer/AnalyzerTest.java | 5 +-
7 files changed, 87 insertions(+), 7 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
index d12f71f5303..8854fc1b1ec 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TypeProvider.java
@@ -98,20 +98,20 @@ public class TypeProvider {
return new TypeProvider(ImmutableMap.of());
}
- private TypeProvider(Map<Symbol, Type> types) {
+ public TypeProvider(Map<Symbol, Type> types) {
this.types = types;
this.typeMap = null;
}
- private TypeProvider(
+ public TypeProvider(
Map<String, TSDataType> typeMap, TemplatedInfo templatedInfo,
Map<Symbol, Type> types) {
this.typeMap = typeMap;
this.templatedInfo = templatedInfo;
this.types = types;
}
- public Type get(Symbol symbol) {
+ public Type getTableModelType(Symbol symbol) {
requireNonNull(symbol, "symbol is null");
Type type = types.get(symbol);
@@ -120,6 +120,12 @@ public class TypeProvider {
return type;
}
+ public void putTableModelType(Symbol symbol, Type type) {
+ requireNonNull(symbol, "symbol is null");
+
+ types.put(symbol, type);
+ }
+
public Map<Symbol, Type> allTypes() {
// types may be a HashMap, so creating an ImmutableMap here would add
extra cost when allTypes
// gets called frequently
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/PlanFragment.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/PlanFragment.java
index 925bfe4416e..a95b1ad154a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/PlanFragment.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/PlanFragment.java
@@ -29,6 +29,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesScanNode;
import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.VirtualSourceNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.TableModelTypeProviderExtractor;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataOutputStream;
@@ -78,6 +79,10 @@ public class PlanFragment {
this.typeProvider = SubPlanTypeExtractor.extractor(planNodeTree, allTypes);
}
+ public void generateTableModelTypeProvider(TypeProvider allTypes) {
+ this.typeProvider =
TableModelTypeProviderExtractor.extractor(planNodeTree, allTypes);
+ }
+
public boolean isRoot() {
return isRoot;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
index cb76bf10504..81e1166bb67 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/ExpressionAnalyzer.java
@@ -322,7 +322,7 @@ public class ExpressionAnalyzer {
// return setExpressionType(node,
resolvedField.get().getType());
// }
// }
- Type type = symbolTypes.get(Symbol.from(node));
+ Type type = symbolTypes.getTableModelType(Symbol.from(node));
return setExpressionType(node, type);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
index e15e8ec00ca..5247d9ff06e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/FragmentInstanceGenerator.java
@@ -144,7 +144,7 @@ public class FragmentInstanceGenerator {
});
if (analysis.getStatement() instanceof Query) {
-
fragmentInstance.getFragment().generateTypeProvider(queryContext.getTypeProvider());
+
fragmentInstance.getFragment().generateTableModelTypeProvider(queryContext.getTypeProvider());
}
instanceMap.putIfAbsent(fragment.getId(), fragmentInstance);
fragmentInstanceList.add(fragmentInstance);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableModelTypeProviderExtractor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableModelTypeProviderExtractor.java
new file mode 100644
index 00000000000..eecde987b28
--- /dev/null
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableModelTypeProviderExtractor.java
@@ -0,0 +1,64 @@
+package org.apache.iotdb.db.queryengine.plan.relational.planner.distribute;
+
+import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.SimplePlanVisitor;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
+import
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
+
+import java.util.HashMap;
+
+public class TableModelTypeProviderExtractor {
+ public static TypeProvider extractor(PlanNode root, TypeProvider allTypes) {
+ TypeProvider typeProvider = new TypeProvider(new HashMap<>());
+ root.accept(new Visitor(typeProvider, allTypes), null);
+ return typeProvider;
+ }
+
+ private static class Visitor extends SimplePlanVisitor<Void> {
+ private final TypeProvider typeProvider;
+ private final TypeProvider allTypes;
+
+ public Visitor(TypeProvider typeProvider, TypeProvider allTypes) {
+ this.typeProvider = typeProvider;
+ this.allTypes = allTypes;
+ }
+
+ @Override
+ public Void visitPlan(PlanNode node, Void context) {
+ node.getOutputSymbols()
+ .forEach(
+ symbol -> typeProvider.putTableModelType(symbol,
allTypes.getTableModelType(symbol)));
+ for (PlanNode source : node.getChildren()) {
+ source.accept(this, context);
+ }
+ return null;
+ }
+
+ @Override
+ public Void visitTableScan(TableScanNode node, Void context) {
+ node.getAssignments().forEach((k, v) ->
typeProvider.putTableModelType(k, v.getType()));
+ return null;
+ }
+
+ @Override
+ public Void visitProject(ProjectNode node, Void context) {
+ // TODO add expression process logic
+ // node.getAssignments().forEach((k,v) ->
typeProvider.putTableModelType(k,
+ // v.getType()));
+ return null;
+ }
+
+ @Override
+ public Void visitFilter(FilterNode node, Void context) {
+ return null;
+ }
+
+ @Override
+ public Void visitOutput(OutputNode node, Void context) {
+ return null;
+ }
+ }
+}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
index ed65602cf9e..e00ffd7e603 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
@@ -45,4 +45,8 @@ public class ProjectNode extends SingleChildProcessNode {
public List<Symbol> getOutputSymbols() {
return assignments.getOutputs();
}
+
+ public Assignments getAssignments() {
+ return this.assignments;
+ }
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index 8e562f742e6..36786f8f0bb 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.QueryId;
import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnHandle;
@@ -151,8 +152,8 @@ public class AnalyzerTest {
RelationalDistributionPlanner distributionPlanner =
new RelationalDistributionPlanner(actualAnalysis, logicalQueryPlan,
context);
- // DistributedQueryPlan distributedQueryPlan = distributionPlanner.plan();
- // System.out.println(distributedQueryPlan);
+ DistributedQueryPlan distributedQueryPlan = distributionPlanner.plan();
+ System.out.println(distributedQueryPlan);
}
public static Analysis analyzeSQL(String sql, Metadata metadata) {