77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.13 1998/01/1415:48:21 momjian Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.14 1998/01/1419:55:53 momjian Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -42,7 +42,7 @@ static List *replace_subclause_joinvar_refs(List *clauses,
4242List * outer_tlist ,List * inner_tlist );
4343static Var * replace_joinvar_refs (Var * var ,List * outer_tlist ,List * inner_tlist );
4444static List * tlist_temp_references (Oid tempid ,List * tlist );
45- static void replace_result_clause (List * clause ,List * subplanTargetList );
45+ static void replace_result_clause (Node * clause ,List * subplanTargetList );
4646static bool OperandIsInner (Node * opnd ,int inner_relid );
4747static void replace_agg_clause (Node * expr ,List * targetlist );
4848static Node * del_agg_clause (Node * clause );
@@ -554,7 +554,7 @@ set_result_tlist_references(Result *resultNode)
554554{
555555entry = (TargetEntry * )lfirst (t );
556556expr = (Expr * )get_expr (entry );
557- replace_result_clause ((List * )expr ,subplanTargetList );
557+ replace_result_clause ((Node * )expr ,subplanTargetList );
558558}
559559}
560560
@@ -568,16 +568,15 @@ set_result_tlist_references(Result *resultNode)
568568 *
569569 */
570570static void
571- replace_result_clause (List * clause ,
571+ replace_result_clause (Node * clause ,
572572List * subplanTargetList )/* target list of the
573573 * subplan */
574574{
575575List * t ;
576- List * subClause ;
577- TargetEntry * subplanVar ;
578576
579577if (IsA (clause ,Var ))
580578{
579+ TargetEntry * subplanVar ;
581580
582581/*
583582 * Ha! A Var node!
@@ -591,55 +590,59 @@ replace_result_clause(List *clause,
591590((Var * )clause )-> varno = (Index )OUTER ;
592591((Var * )clause )-> varattno = subplanVar -> resdom -> resno ;
593592}
594- else if (is_funcclause (( Node * ) clause ))
593+ else if (IsA ( clause , Aggreg ))
595594{
595+ replace_result_clause (((Aggreg * )clause )-> target ,subplanTargetList );
596+ }
597+ else if (is_funcclause (clause ))
598+ {
599+ List * subExpr ;
596600
597601/*
598602 * This is a function. Recursively call this routine for its
599603 * arguments...
600604 */
601- subClause = ((Expr * )clause )-> args ;
602- foreach (t ,subClause )
605+ subExpr = ((Expr * )clause )-> args ;
606+ foreach (t ,subExpr )
603607{
604608replace_result_clause (lfirst (t ),subplanTargetList );
605609}
606610}
607611else if (IsA (clause ,ArrayRef ))
608612{
609613ArrayRef * aref = (ArrayRef * )clause ;
610-
614+
611615/*
612616 * This is an arrayref. Recursively call this routine for its
613617 * expression and its index expression...
614618 */
615- subClause = aref -> refupperindexpr ;
616- foreach (t ,subClause )
619+ foreach (t ,aref -> refupperindexpr )
617620{
618621replace_result_clause (lfirst (t ),subplanTargetList );
619622}
620- subClause = aref -> reflowerindexpr ;
621- foreach (t ,subClause )
623+ foreach (t ,aref -> reflowerindexpr )
622624{
623625replace_result_clause (lfirst (t ),subplanTargetList );
624626}
625- replace_result_clause (( List * ) aref -> refexpr ,
627+ replace_result_clause (aref -> refexpr ,
626628subplanTargetList );
627- replace_result_clause (( List * ) aref -> refassgnexpr ,
629+ replace_result_clause (aref -> refassgnexpr ,
628630subplanTargetList );
629631}
630- else if (is_opclause (( Node * ) clause ))
632+ else if (is_opclause (clause ))
631633{
634+ Node * subNode ;
632635
633636/*
634637 * This is an operator. Recursively call this routine for both its
635638 * left and right operands
636639 */
637- subClause = (List * )get_leftop ((Expr * )clause );
638- replace_result_clause (subClause ,subplanTargetList );
639- subClause = (List * )get_rightop ((Expr * )clause );
640- replace_result_clause (subClause ,subplanTargetList );
640+ subNode = (Node * )get_leftop ((Expr * )clause );
641+ replace_result_clause (subNode ,subplanTargetList );
642+ subNode = (Node * )get_rightop ((Expr * )clause );
643+ replace_result_clause (subNode ,subplanTargetList );
641644}
642- else if (IsA (clause ,Param )|| IsA (clause ,Const ))
645+ else if (IsA (clause ,Param )|| IsA (clause ,Const ))
643646{
644647/* do nothing! */
645648}
@@ -731,10 +734,9 @@ static void
731734replace_agg_clause (Node * clause ,List * subplanTargetList )
732735{
733736List * t ;
734- TargetEntry * subplanVar ;
735-
736737if (IsA (clause ,Var ))
737738{
739+ TargetEntry * subplanVar ;
738740
739741/*
740742 * Ha! A Var node!
@@ -784,7 +786,6 @@ replace_agg_clause(Node *clause, List *subplanTargetList)
784786}
785787else if (is_opclause (clause ))
786788{
787-
788789/*
789790 * This is an operator. Recursively call this routine for both its
790791 * left and right operands