1616 *
1717 *
1818 * IDENTIFICATION
19- * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.18 2004/05/2604:41:26 neilc Exp $
19+ * $PostgreSQL: pgsql/src/backend/optimizer/prep/prepjointree.c,v 1.19 2004/05/2618:35:41 tgl Exp $
2020 *
2121 *-------------------------------------------------------------------------
2222 */
@@ -897,12 +897,15 @@ simplify_jointree(Query *parse, Node *jtnode)
897897{
898898FromExpr * f = (FromExpr * )jtnode ;
899899List * newlist = NIL ;
900+ int children_remaining ;
900901ListCell * l ;
901902
903+ children_remaining = list_length (f -> fromlist );
902904foreach (l ,f -> fromlist )
903905{
904906Node * child = (Node * )lfirst (l );
905907
908+ children_remaining -- ;
906909/* Recursively simplify this child... */
907910child = simplify_jointree (parse ,child );
908911/* Now, is it a FromExpr? */
@@ -917,16 +920,7 @@ simplify_jointree(Query *parse, Node *jtnode)
917920 */
918921FromExpr * subf = (FromExpr * )child ;
919922int childlen = length (subf -> fromlist );
920- int myothers ;
921- ListCell * l2 ;
922-
923- /*
924- * XXX: This is a quick hack, not sure of the proper
925- * fix.
926- */
927- myothers = length (newlist );
928- for_each_cell (l2 ,lnext (l ))
929- myothers ++ ;
923+ int myothers = length (newlist )+ children_remaining ;
930924
931925if (childlen <=1 ||
932926(childlen + myothers ) <=from_collapse_limit )