aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-05-26 18:35:41 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-05-26 18:35:41 +0000
commit51227f8d9db81237a3da8133fa0dc5e39d9fc905 (patch)
tree5d833b601e96a2369f03ec4aac3c56733f3ad5fe /src
parent0d5364fd9835302e05be85e3e49c98326013a0f7 (diff)
downloadpostgresql-51227f8d9db81237a3da8133fa0dc5e39d9fc905.tar.gz
postgresql-51227f8d9db81237a3da8133fa0dc5e39d9fc905.zip
Use a cleaner substitute for the inability to apply length() to the tail
of a list. Per private discussion with Neil.
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/prep/prepjointree.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c
index f916d54602d..37c6e967cf1 100644
--- a/src/backend/optimizer/prep/prepjointree.c
+++ b/src/backend/optimizer/prep/prepjointree.c
@@ -16,7 +16,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.18 2004/05/26 04:41:26 neilc Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.19 2004/05/26 18:35:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -897,12 +897,15 @@ simplify_jointree(Query *parse, Node *jtnode)
{
FromExpr *f = (FromExpr *) jtnode;
List *newlist = NIL;
+ int children_remaining;
ListCell *l;
+ children_remaining = list_length(f->fromlist);
foreach(l, f->fromlist)
{
Node *child = (Node *) lfirst(l);
+ children_remaining--;
/* Recursively simplify this child... */
child = simplify_jointree(parse, child);
/* Now, is it a FromExpr? */
@@ -917,16 +920,7 @@ simplify_jointree(Query *parse, Node *jtnode)
*/
FromExpr *subf = (FromExpr *) child;
int childlen = length(subf->fromlist);
- int myothers;
- ListCell *l2;
-
- /*
- * XXX: This is a quick hack, not sure of the proper
- * fix.
- */
- myothers = length(newlist);
- for_each_cell(l2, lnext(l))
- myothers++;
+ int myothers = length(newlist) + children_remaining;
if (childlen <= 1 ||
(childlen + myothers) <= from_collapse_limit)