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

caogaofei pushed a commit to branch beyyes/joinOperator
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/beyyes/joinOperator by this 
push:
     new 9b146fd85ad fix join using ut that assignments in project/tablescan is 
not matched.
9b146fd85ad is described below

commit 9b146fd85adaa819ad816083236b63c4eafabd22
Author: Beyyes <[email protected]>
AuthorDate: Wed Sep 18 11:32:53 2024 +0800

    fix join using ut that assignments in project/tablescan is not matched.
---
 .../plan/relational/planner/TableLogicalPlanner.java   |  4 ++++
 .../planner/iterative/rule/InlineProjections.java      | 11 ++++++-----
 .../planner/iterative/rule/PruneTableScanColumns.java  | 18 ++++--------------
 .../planner/optimizations/LogicalOptimizeFactory.java  | 11 +++++------
 4 files changed, 19 insertions(+), 25 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
index cb83d60007b..a5a711fc2eb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java
@@ -139,7 +139,9 @@ public class TableLogicalPlanner {
           .recordPlanCost(TABLE_TYPE, LOGICAL_PLANNER, System.nanoTime() - 
startTime);
       startTime = System.nanoTime();
 
+      int cnt = 0;
       for (PlanOptimizer optimizer : planOptimizers) {
+        // cnt++;
         planNode =
             optimizer.optimize(
                 planNode,
@@ -153,6 +155,8 @@ public class TableLogicalPlanner {
                     queryContext.getQueryId(),
                     warningCollector,
                     
PlanOptimizersStatsCollector.createPlanOptimizersStatsCollector()));
+
+        cnt++;
       }
       QueryPlanCostMetricSet.getInstance()
           .recordPlanCost(TABLE_TYPE, LOGICAL_PLAN_OPTIMIZE, System.nanoTime() 
- startTime);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/InlineProjections.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/InlineProjections.java
index 0731acb5f63..5fe62438c41 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/InlineProjections.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/InlineProjections.java
@@ -32,6 +32,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -98,13 +99,13 @@ public class InlineProjections implements Rule<ProjectNode> 
{
       return Optional.empty();
     }
 
-    // inline the expressions
+    // inline the expressions; use LinkedHashMap to keep order
     Assignments assignments = child.getAssignments().filter(targets::contains);
     Map<Symbol, Expression> parentAssignments =
-        parent.getAssignments().entrySet().stream()
-            .collect(
-                Collectors.toMap(
-                    Map.Entry::getKey, entry -> 
inlineReferences(entry.getValue(), assignments)));
+        new LinkedHashMap<>(parent.getAssignments().getMap().size());
+    for (Map.Entry<Symbol, Expression> entry : 
parent.getAssignments().getMap().entrySet()) {
+      parentAssignments.put(entry.getKey(), inlineReferences(entry.getValue(), 
assignments));
+    }
 
     // Synthesize identity assignments for the inputs of expressions that were 
inlined
     // to place in the child projection.
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableScanColumns.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableScanColumns.java
index 8c033882112..2bd37ea1a20 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableScanColumns.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableScanColumns.java
@@ -13,8 +13,6 @@
  */
 package org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule;
 
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
-import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
@@ -25,7 +23,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationT
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -47,23 +45,15 @@ public class PruneTableScanColumns extends 
ProjectOffPushDownRule<TableScanNode>
   @Override
   protected Optional<PlanNode> pushDownProjectOff(
       Context context, TableScanNode node, Set<Symbol> referencedOutputs) {
-    SessionInfo sessionInfo = context.getSessionInfo();
-    TypeProvider types = context.getSymbolAllocator().getTypes();
-
-    return pruneColumns(metadata, types, sessionInfo, node, referencedOutputs);
+    return pruneColumns(node, referencedOutputs);
   }
 
-  public static Optional<PlanNode> pruneColumns(
-      Metadata metadata,
-      TypeProvider types,
-      SessionInfo sessionInfo,
-      TableScanNode node,
-      Set<Symbol> referencedOutputs) {
+  public static Optional<PlanNode> pruneColumns(TableScanNode node, 
Set<Symbol> referencedOutputs) {
     if (node instanceof AggregationTableScanNode) {
       return Optional.empty();
     }
     List<Symbol> newOutputs = new ArrayList<>();
-    Map<Symbol, ColumnSchema> newAssignments = new HashMap<>();
+    Map<Symbol, ColumnSchema> newAssignments = new LinkedHashMap<>();
     for (Symbol symbol : node.getOutputSymbols()) {
       if (referencedOutputs.contains(symbol)) {
         newOutputs.add(symbol);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LogicalOptimizeFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LogicalOptimizeFactory.java
index 1a654eecbb4..83464ed78cb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LogicalOptimizeFactory.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LogicalOptimizeFactory.java
@@ -148,9 +148,8 @@ public class LogicalOptimizeFactory {
             ruleStats,
             ImmutableSet.<Rule<?>>builder()
                 .addAll(columnPruningRules)
-                //                    .addAll(projectionPushdownRules)
-                //                    .addAll(new UnwrapRowSubscript().rules())
-                //                    .addAll(new PushCastIntoRow().rules())
+                // .addAll(projectionPushdownRules).addAll(new
+                // UnwrapRowSubscript().rules()).addAll(new 
PushCastIntoRow().rules())
                 .addAll(
                     ImmutableSet.of(
                         new MergeFilters(),
@@ -184,13 +183,13 @@ public class LogicalOptimizeFactory {
             plannerContext,
             ruleStats,
             ImmutableSet.<Rule<?>>builder()
-                //                    .addAll(projectionPushdownRules)
+                // .addAll(projectionPushdownRules)
                 .addAll(columnPruningRules)
                 .addAll(limitPushdownRules)
                 .addAll(
                     ImmutableSet.of(
-                        //                        new MergeUnion(),
-                        //                        new 
RemoveEmptyUnionBranches(),
+                        // new MergeUnion(),
+                        // new RemoveEmptyUnionBranches(),
                         new MergeFilters(),
                         new RemoveTrivialFilters(),
                         new MergeLimits(),

Reply via email to