mirror of
https://github.com/postgres/postgres.git
synced 2025-05-29 16:21:20 +03:00
Make set_function_size_estimates() marginally smarter: per original
comment, it can at least test whether the expression returns set.
This commit is contained in:
parent
93d358a8a4
commit
e011459029
@ -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)
|
|||||||
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...
|
||||||
*/
|
*/
|
||||||
rel->tuples = 1000;
|
if (expression_returns_set(rte->funcexpr))
|
||||||
|
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user