diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-11-19 23:22:00 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-11-19 23:22:00 +0000 |
commit | b60be3f2f8d094da79e04c6eda888f401b09dc39 (patch) | |
tree | 0590e0647deb5041b8dabcabf03770ebef8e8d43 /src/backend/optimizer/plan/setrefs.c | |
parent | 54cb1db6cf4d4bf4e44148582bbd2c99684e7dfd (diff) |
Add an at-least-marginally-plausible method of estimating the number
of groups produced by GROUP BY. This improves the accuracy of planning
estimates for grouped subselects, and is needed to check whether a
hashed aggregation plan risks memory overflow.
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 66998b036f9..4239d9c3c12 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.81 2002/09/04 20:31:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.82 2002/11/19 23:21:59 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -439,7 +439,14 @@ join_references_mutator(Node *node, return (Node *) newvar; } - /* Perhaps it's a join alias that can be resolved to input vars? */ + /* Return the Var unmodified, if it's for acceptable_rel */ + if (var->varno == context->acceptable_rel) + return (Node *) copyObject(var); + + /* + * Perhaps it's a join alias that can be resolved to input vars? + * We try this last since it's relatively slow. + */ newnode = flatten_join_alias_vars((Node *) var, context->rtable, true); @@ -450,13 +457,8 @@ join_references_mutator(Node *node, return newnode; } - /* - * No referent found for Var --- either raise an error, or return - * the Var unmodified if it's for acceptable_rel. - */ - if (var->varno != context->acceptable_rel) - elog(ERROR, "join_references: variable not in subplan target lists"); - return (Node *) copyObject(var); + /* No referent found for Var */ + elog(ERROR, "join_references: variable not in subplan target lists"); } return expression_tree_mutator(node, join_references_mutator, |