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) {

Reply via email to