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(),