v10-003-Introduce_estimate_join_rows.patch
text/x-diff
Filename: v10-003-Introduce_estimate_join_rows.patch
Type: text/x-diff
Part: 2
Patch
Format: unified
Series: patch v10
| File | + | − |
|---|---|---|
| src/backend/optimizer/path/costsize.c | 17 | 12 |
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c
index 99c5ad9b4a..353dc116f4 100644
--- a/src/backend/optimizer/path/costsize.c
+++ b/src/backend/optimizer/path/costsize.c
@@ -2291,6 +2291,20 @@ cost_group(Path *path, PlannerInfo *root,
}
/*
+ * estimate_join_rows
+ * Set rows of a join path according to its parent relation or according
+ * to parameters.
+ */
+static void
+estimate_join_rows(PlannerInfo *root, Path *path)
+{
+ if (path->param_info)
+ path->rows = path->param_info->ppi_rows;
+ else
+ path->rows = path->parent->rows;
+}
+
+/*
* initial_cost_nestloop
* Preliminary estimate of the cost of a nestloop join path.
*
@@ -2411,10 +2425,7 @@ final_cost_nestloop(PlannerInfo *root, NestPath *path,
inner_path_rows = 1;
/* Mark the path with the correct row estimate */
- if (path->path.param_info)
- path->path.rows = path->path.param_info->ppi_rows;
- else
- path->path.rows = path->path.parent->rows;
+ estimate_join_rows(root, (Path *) path);
/* For partial paths, scale row estimate. */
if (path->path.parallel_workers > 0)
@@ -2857,10 +2868,7 @@ final_cost_mergejoin(PlannerInfo *root, MergePath *path,
inner_path_rows = 1;
/* Mark the path with the correct row estimate */
- if (path->jpath.path.param_info)
- path->jpath.path.rows = path->jpath.path.param_info->ppi_rows;
- else
- path->jpath.path.rows = path->jpath.path.parent->rows;
+ estimate_join_rows(root, (Path *) path);
/* For partial paths, scale row estimate. */
if (path->jpath.path.parallel_workers > 0)
@@ -3287,10 +3295,7 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path,
ListCell *hcl;
/* Mark the path with the correct row estimate */
- if (path->jpath.path.param_info)
- path->jpath.path.rows = path->jpath.path.param_info->ppi_rows;
- else
- path->jpath.path.rows = path->jpath.path.parent->rows;
+ estimate_join_rows(root, (Path *) path);
/* For partial paths, scale row estimate. */
if (path->jpath.path.parallel_workers > 0)