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 <u.kra...@sap.com> 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());