Commit e0114590 authored by Tom Lane's avatar Tom Lane

Make set_function_size_estimates() marginally smarter: per original

comment, it can at least test whether the expression returns set.
parent 93d358a8
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/optimizer/path/costsize.c,v 1.147 2005/08/27 22:37:00 tgl Exp $ * $PostgreSQL: pgsql/src/backend/optimizer/path/costsize.c,v 1.148 2005/10/05 17:19:19 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1898,17 +1898,23 @@ join_in_selectivity(JoinPath *path, PlannerInfo *root) ...@@ -1898,17 +1898,23 @@ join_in_selectivity(JoinPath *path, PlannerInfo *root)
void void
set_function_size_estimates(PlannerInfo *root, RelOptInfo *rel) set_function_size_estimates(PlannerInfo *root, RelOptInfo *rel)
{ {
RangeTblEntry *rte;
/* Should only be applied to base relations that are functions */ /* Should only be applied to base relations that are functions */
Assert(rel->relid > 0); Assert(rel->relid > 0);
Assert(rel->rtekind == RTE_FUNCTION); rte = rt_fetch(rel->relid, root->parse->rtable);
Assert(rte->rtekind == RTE_FUNCTION);
/* /*
* Estimate number of rows the function itself will return. * Estimate number of rows the function itself will return.
* *
* XXX no idea how to do this yet; but should at least check whether * XXX no idea how to do this yet; but we can at least check whether
* function returns set or not... * function returns set or not...
*/ */
if (expression_returns_set(rte->funcexpr))
rel->tuples = 1000; rel->tuples = 1000;
else
rel->tuples = 1;
/* Now estimate number of output rows, etc */ /* Now estimate number of output rows, etc */
set_baserel_size_estimates(root, rel); set_baserel_size_estimates(root, rel);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment