[CALCITE-6249] RelNode::estimatedRowCount should not be used in computeSelfCost
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBatchNestedLoopJoin.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBatchNestedLoopJoin.java
index 94ef9c3..11a3620 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBatchNestedLoopJoin.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableBatchNestedLoopJoin.java
@@ -124,8 +124,8 @@
final RelMetadataQuery mq) {
double rowCount = mq.getRowCount(this);
- final double rightRowCount = right.estimateRowCount(mq);
- final double leftRowCount = left.estimateRowCount(mq);
+ final double rightRowCount = mq.getRowCount(right);
+ final double leftRowCount = mq.getRowCount(left);
if (Double.isInfinite(leftRowCount) || Double.isInfinite(rightRowCount)) {
return planner.getCostFactory().makeInfiniteCost();
}
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableHashJoin.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableHashJoin.java
index cfe44da..8bd9ffb 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableHashJoin.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableHashJoin.java
@@ -149,8 +149,8 @@
// Cheaper if the smaller number of rows is coming from the LHS.
// Model this by adding L log L to the cost.
- final double rightRowCount = right.estimateRowCount(mq);
- final double leftRowCount = left.estimateRowCount(mq);
+ final double rightRowCount = mq.getRowCount(right);
+ final double leftRowCount = mq.getRowCount(left);
if (Double.isInfinite(leftRowCount)) {
rowCount = leftRowCount;
} else {
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java
index 3f42e06..97eae01 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java
@@ -424,8 +424,8 @@
// We assume that the inputs are sorted. The price of sorting them has
// already been paid. The cost of the join is therefore proportional to the
// input and output size.
- final double rightRowCount = right.estimateRowCount(mq);
- final double leftRowCount = left.estimateRowCount(mq);
+ final double rightRowCount = mq.getRowCount(right);
+ final double leftRowCount = mq.getRowCount(left);
final double rowCount = mq.getRowCount(this);
final double d = leftRowCount + rightRowCount + rowCount;
return planner.getCostFactory().makeCost(d, 0, 0);
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableNestedLoopJoin.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableNestedLoopJoin.java
index 6b1bf40..de539ad 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableNestedLoopJoin.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableNestedLoopJoin.java
@@ -108,8 +108,8 @@
}
}
- final double rightRowCount = right.estimateRowCount(mq);
- final double leftRowCount = left.estimateRowCount(mq);
+ final double rightRowCount = mq.getRowCount(right);
+ final double leftRowCount = mq.getRowCount(left);
if (Double.isInfinite(leftRowCount)) {
rowCount = leftRowCount;
}
diff --git a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
index 9c60fd1..29b73a3 100644
--- a/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
+++ b/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java
@@ -422,8 +422,8 @@
}
@Override public double estimateRowCount(RelMetadataQuery mq) {
- final double leftRowCount = left.estimateRowCount(mq);
- final double rightRowCount = right.estimateRowCount(mq);
+ final double leftRowCount = mq.getRowCount(left);
+ final double rightRowCount = mq.getRowCount(right);
return Math.max(leftRowCount, rightRowCount);
}
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Correlate.java b/core/src/main/java/org/apache/calcite/rel/core/Correlate.java
index f5194a1..752dd9b 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Correlate.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Correlate.java
@@ -230,8 +230,8 @@
RelMetadataQuery mq) {
double rowCount = mq.getRowCount(this);
- final double rightRowCount = right.estimateRowCount(mq);
- final double leftRowCount = left.estimateRowCount(mq);
+ final double rightRowCount = mq.getRowCount(right);
+ final double leftRowCount = mq.getRowCount(left);
if (Double.isInfinite(leftRowCount) || Double.isInfinite(rightRowCount)) {
return planner.getCostFactory().makeInfiniteCost();
}
diff --git a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
index 2a1c498..390852f 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/TableScan.java
@@ -102,7 +102,7 @@
@Override public @Nullable RelOptCost computeSelfCost(RelOptPlanner planner,
RelMetadataQuery mq) {
- double dRows = table.getRowCount();
+ double dRows = mq.getRowCount(this);
double dCpu = dRows + 1; // ensure non-zero cost
double dIo = 0;
return planner.getCostFactory().makeCost(dRows, dCpu, dIo);
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
index 95a604c..523c00b 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/AggregateStarTableRule.java
@@ -119,7 +119,7 @@
final CalciteSchema.TableEntry tableEntry = pair.left;
final TileKey tileKey = pair.right;
final RelMetadataQuery mq = call.getMetadataQuery();
- final double rowCount = aggregate.estimateRowCount(mq);
+ final double rowCount = mq.getRowCount(aggregate);
final Table aggregateTable = tableEntry.getTable();
final RelDataType aggregateTableRowType =
aggregateTable.getRowType(cluster.getTypeFactory());