77 *
88 *
99 * IDENTIFICATION
10- * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.45 1999/05/06 23:07:33 tgl Exp $
10+ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.46 1999/05/12 15:01:39 wieck Exp $
1111 *
1212 *-------------------------------------------------------------------------
1313 */
@@ -961,7 +961,8 @@ del_agg_clause(Node *clause)
961961 */
962962
963963void
964- check_having_for_ungrouped_vars (Node * clause ,List * groupClause )
964+ check_having_for_ungrouped_vars (Node * clause ,List * groupClause ,
965+ List * targetList )
965966{
966967List * t ;
967968
@@ -981,7 +982,7 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause)
981982else if (IsA (clause ,Iter ))
982983{
983984check_having_for_ungrouped_vars (((Iter * )clause )-> iterexpr ,
984- groupClause );
985+ groupClause , targetList );
985986}
986987else if (is_subplan (clause ))
987988{
@@ -997,7 +998,8 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause)
997998foreach (gl ,groupClause )
998999{
9991000if (var_equal (lfirst (t ),
1000- get_expr (((GroupClause * )lfirst (gl ))-> entry )))
1001+ get_groupclause_expr ((GroupClause * )
1002+ lfirst (gl ),targetList )))
10011003{
10021004contained_in_group_clause = true;
10031005break ;
@@ -1016,20 +1018,22 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause)
10161018 * subplan is a kind of Expr node.
10171019 */
10181020foreach (t , ((Expr * )clause )-> args )
1019- check_having_for_ungrouped_vars (lfirst (t ),groupClause );
1021+ check_having_for_ungrouped_vars (lfirst (t ),groupClause ,
1022+ targetList );
10201023}
10211024else if (IsA (clause ,List ))
10221025{
10231026/*
10241027 * Recursively scan AND subclauses (see NOTE above).
10251028 */
10261029foreach (t , ((List * )clause ))
1027- check_having_for_ungrouped_vars (lfirst (t ),groupClause );
1030+ check_having_for_ungrouped_vars (lfirst (t ),groupClause ,
1031+ targetList );
10281032}
10291033else if (IsA (clause ,Aggref ))
10301034{
10311035check_having_for_ungrouped_vars (((Aggref * )clause )-> target ,
1032- groupClause );
1036+ groupClause , targetList );
10331037}
10341038else if (IsA (clause ,ArrayRef ))
10351039{
@@ -1040,22 +1044,28 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause)
10401044 * expression and its index expression...
10411045 */
10421046foreach (t ,aref -> refupperindexpr )
1043- check_having_for_ungrouped_vars (lfirst (t ),groupClause );
1047+ check_having_for_ungrouped_vars (lfirst (t ),groupClause ,
1048+ targetList );
10441049foreach (t ,aref -> reflowerindexpr )
1045- check_having_for_ungrouped_vars (lfirst (t ),groupClause );
1046- check_having_for_ungrouped_vars (aref -> refexpr ,groupClause );
1047- check_having_for_ungrouped_vars (aref -> refassgnexpr ,groupClause );
1050+ check_having_for_ungrouped_vars (lfirst (t ),groupClause ,
1051+ targetList );
1052+ check_having_for_ungrouped_vars (aref -> refexpr ,groupClause ,
1053+ targetList );
1054+ check_having_for_ungrouped_vars (aref -> refassgnexpr ,groupClause ,
1055+ targetList );
10481056}
10491057else if (case_clause (clause ))
10501058{
10511059foreach (t , ((CaseExpr * )clause )-> args )
10521060{
10531061CaseWhen * when = (CaseWhen * )lfirst (t );
1054- check_having_for_ungrouped_vars (when -> expr ,groupClause );
1055- check_having_for_ungrouped_vars (when -> result ,groupClause );
1062+ check_having_for_ungrouped_vars (when -> expr ,groupClause ,
1063+ targetList );
1064+ check_having_for_ungrouped_vars (when -> result ,groupClause ,
1065+ targetList );
10561066}
10571067check_having_for_ungrouped_vars (((CaseExpr * )clause )-> defresult ,
1058- groupClause );
1068+ groupClause , targetList );
10591069}
10601070else
10611071{