summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/setrefs.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-11-19 23:22:00 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-11-19 23:22:00 +0000
commitb60be3f2f8d094da79e04c6eda888f401b09dc39 (patch)
tree0590e0647deb5041b8dabcabf03770ebef8e8d43 /src/backend/optimizer/plan/setrefs.c
parent54cb1db6cf4d4bf4e44148582bbd2c99684e7dfd (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.c20
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,