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

Reply via email to