pgindent file.

This commit is contained in:
Bruce Momjian 1999-01-26 05:57:14 +00:00
parent 2ee522954d
commit 692a65e6ff

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.33 1999/01/25 18:02:18 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.34 1999/01/26 05:57:14 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -946,9 +946,7 @@ check_having_qual_for_vars(Node *clause, List *targetlist_so_far)
/* Check if the VAR is already contained in the targetlist */ /* Check if the VAR is already contained in the targetlist */
if (tlist_member((Var *) clause, (List *) targetlist_so_far) == NULL) if (tlist_member((Var *) clause, (List *) targetlist_so_far) == NULL)
{
add_tl_element(&tmp_rel, (Var *) clause); add_tl_element(&tmp_rel, (Var *) clause);
}
return tmp_rel.targetlist; return tmp_rel.targetlist;
} }
@ -962,9 +960,7 @@ check_having_qual_for_vars(Node *clause, List *targetlist_so_far)
* arguments... * arguments...
*/ */
foreach(t, ((Expr *) clause)->args) foreach(t, ((Expr *) clause)->args)
{
targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far);
}
return targetlist_so_far; return targetlist_so_far;
} }
else if (IsA(clause, Aggref)) else if (IsA(clause, Aggref))
@ -982,13 +978,9 @@ check_having_qual_for_vars(Node *clause, List *targetlist_so_far)
* expression and its index expression... * expression and its index expression...
*/ */
foreach(t, aref->refupperindexpr) foreach(t, aref->refupperindexpr)
{
targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far);
}
foreach(t, aref->reflowerindexpr) foreach(t, aref->reflowerindexpr)
{
targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far);
}
targetlist_so_far = check_having_qual_for_vars(aref->refexpr, targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(aref->refexpr, targetlist_so_far);
targetlist_so_far = check_having_qual_for_vars(aref->refassgnexpr, targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(aref->refassgnexpr, targetlist_so_far);
@ -1016,18 +1008,20 @@ check_having_qual_for_vars(Node *clause, List *targetlist_so_far)
/* do nothing! */ /* do nothing! */
return targetlist_so_far; return targetlist_so_far;
} }
/* If we get to a sublink, then we only have to check the lefthand side of the expression
* to see if there are any additional VARs */ /*
* If we get to a sublink, then we only have to check the lefthand
* side of the expression to see if there are any additional VARs
*/
else if (IsA(clause, SubLink)) else if (IsA(clause, SubLink))
{ {
foreach(t, ((List *) ((SubLink *) clause)->lefthand)) foreach(t, ((List *) ((SubLink *) clause)->lefthand))
{
targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far);
}
return targetlist_so_far; return targetlist_so_far;
} }
else else
{ {
/* /*
* Ooops! we can not handle that! * Ooops! we can not handle that!
*/ */
@ -1044,7 +1038,8 @@ check_having_qual_for_vars(Node *clause, List *targetlist_so_far)
List * List *
check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupClause) check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupClause)
{ {
List *t, *l1; List *t,
*l1;
List *agg_list = NIL; List *agg_list = NIL;
int contained_in_group_clause = 0; int contained_in_group_clause = 0;
@ -1060,8 +1055,8 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
subplanVar = match_varid((Var *) clause, subplanTargetList); subplanVar = match_varid((Var *) clause, subplanTargetList);
/* /*
* Change the varno & varattno fields of the var node to point to the resdom->resno * Change the varno & varattno fields of the var node to point to
* fields of the subplan (lefttree) * the resdom->resno fields of the subplan (lefttree)
*/ */
((Var *) clause)->varattno = subplanVar->resdom->resno; ((Var *) clause)->varattno = subplanVar->resdom->resno;
@ -1072,7 +1067,8 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
else if (is_funcclause(clause) || not_clause(clause) || else if (is_funcclause(clause) || not_clause(clause) ||
or_clause(clause) || and_clause(clause)) or_clause(clause) || and_clause(clause))
{ {
int new_length=0, old_length=0; int new_length = 0,
old_length = 0;
/* /*
* This is a function. Recursively call this routine for its * This is a function. Recursively call this routine for its
@ -1086,12 +1082,16 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
check_having_qual_for_aggs(lfirst(t), subplanTargetList, check_having_qual_for_aggs(lfirst(t), subplanTargetList,
groupClause)); groupClause));
/* The arguments of OR or AND clauses are comparisons or relations /*
* and because we are in the havingQual there must be at least one operand * The arguments of OR or AND clauses are comparisons or
* using an aggregate function. If so, we will find it and the length of the * relations and because we are in the havingQual there must
* agg_list will be increased after the above call to * be at least one operand using an aggregate function. If so,
* check_having_qual_for_aggs. If there are no aggregates used, the query * we will find it and the length of the agg_list will be
* could have been formulated using the 'where' clause */ * increased after the above call to
* check_having_qual_for_aggs. If there are no aggregates
* used, the query could have been formulated using the
* 'where' clause
*/
if (((new_length = length((List *) agg_list)) == old_length) || (new_length == 0)) if (((new_length = length((List *) agg_list)) == old_length) || (new_length == 0))
{ {
elog(ERROR, "This could have been done in a where clause!!"); elog(ERROR, "This could have been done in a where clause!!");
@ -1161,12 +1161,18 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
/* do nothing! */ /* do nothing! */
return NIL; return NIL;
} }
/* This is for Sublinks which show up as EXPR nodes. All the other EXPR nodes
* (funcclauses, and_clauses, or_clauses) were caught above */ /*
* This is for Sublinks which show up as EXPR nodes. All the other
* EXPR nodes (funcclauses, and_clauses, or_clauses) were caught above
*/
else if (IsA(clause, Expr)) else if (IsA(clause, Expr))
{ {
/* Only the lefthand side of the sublink has to be checked for aggregates
* to be attached to result_plan->aggs (see planner.c:union_planner() ) /*
* Only the lefthand side of the sublink has to be checked for
* aggregates to be attached to result_plan->aggs (see
* planner.c:union_planner() )
*/ */
foreach(t, ((List *) ((SubLink *) ((SubPlan *) foreach(t, ((List *) ((SubLink *) ((SubPlan *)
((Expr *) clause)->oper)->sublink)->lefthand)) ((Expr *) clause)->oper)->sublink)->lefthand))
@ -1192,9 +1198,11 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
} }
} }
/* All arguments to the Sublink node are attributes from outside used within /*
* the sublink. Here we have to check that only attributes that is grouped for * All arguments to the Sublink node are attributes from outside
* are used! */ * used within the sublink. Here we have to check that only
* attributes that is grouped for are used!
*/
foreach(t, ((Expr *) clause)->args) foreach(t, ((Expr *) clause)->args)
{ {
contained_in_group_clause = 0; contained_in_group_clause = 0;
@ -1203,13 +1211,13 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
{ {
if (tlist_member(lfirst(t), lcons(((GroupClause *) lfirst(l1))->entry, NIL)) != if (tlist_member(lfirst(t), lcons(((GroupClause *) lfirst(l1))->entry, NIL)) !=
NULL) NULL)
{
contained_in_group_clause = 1; contained_in_group_clause = 1;
} }
}
/* If the use of the attribute is allowed (i.e. it is in the groupClause) /*
* we have to adjust the varnos and varattnos */ * If the use of the attribute is allowed (i.e. it is in the
* groupClause) we have to adjust the varnos and varattnos
*/
if (contained_in_group_clause) if (contained_in_group_clause)
{ {
agg_list = agg_list =
@ -1227,6 +1235,7 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
} }
else else
{ {
/* /*
* Ooops! we can not handle that! * Ooops! we can not handle that!
*/ */
@ -1235,4 +1244,5 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla
return NIL; return NIL;
} }
} }
/***S*H***//* End */ /***S*H***//* End */