From 51227f8d9db81237a3da8133fa0dc5e39d9fc905 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 26 May 2004 18:35:41 +0000 Subject: [PATCH] Use a cleaner substitute for the inability to apply length() to the tail of a list. Per private discussion with Neil. --- src/backend/optimizer/prep/prepjointree.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index f916d54602..37c6e967cf 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) -- GitLab