This is an automated email from the ASF dual-hosted git repository.
rubenql pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new a19a954738 [CALCITE-6249] RelNode::estimatedRowCount should not be
used in computeSelfCost
a19a954738 is described below
commit a19a954738e3405f621843a9df71e51002e1609b
Author: Ulrich Kramer <[email protected]>
AuthorDate: Wed Feb 7 08:07:36 2024 +0100
[CALCITE-6249] RelNode::estimatedRowCount should not be used in
computeSelfCost
---
.../calcite/adapter/enumerable/EnumerableBatchNestedLoopJoin.java | 4 ++--
.../org/apache/calcite/adapter/enumerable/EnumerableHashJoin.java | 4 ++--
.../org/apache/calcite/adapter/enumerable/EnumerableMergeJoin.java | 4 ++--
.../apache/calcite/adapter/enumerable/EnumerableNestedLoopJoin.java | 4 ++--
core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcRules.java | 4 ++--
core/src/main/java/org/apache/calcite/rel/core/Correlate.java | 4 ++--
core/src/main/java/org/apache/calcite/rel/core/TableScan.java | 2 +-
.../java/org/apache/calcite/rel/rules/AggregateStarTableRule.java | 2 +-
8 files changed, 14 insertions(+), 14 deletions(-)
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 94ef9c3213..11a3620c8c 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 @@ public class EnumerableBatchNestedLoopJoin extends Join
implements EnumerableRel
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 cfe44da75d..8bd9ffbf08 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 @@ public class EnumerableHashJoin extends Join implements
EnumerableRel {
// 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 3f42e065c8..97eae019d3 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 @@ public class EnumerableMergeJoin extends Join implements
EnumerableRel {
// 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 6b1bf40cf7..de539ad574 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 @@ public class EnumerableNestedLoopJoin extends Join
implements EnumerableRel {
}
}
- 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 9c60fd15b4..29b73a3deb 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 @@ public class JdbcRules {
}
@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 f5194a1e74..752dd9bf15 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 @@ public abstract class Correlate extends BiRel implements
Hintable {
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 2a1c498a44..390852f838 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 @@ public abstract class TableScan
@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 95a604c7d6..523c00bb8a 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 @@ public class AggregateStarTableRule
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());