1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-14 08:21:07 +03:00

Fix for count(*), aggs with views and multiple tables and sum(3).

This commit is contained in:
Bruce Momjian
1998-01-04 04:31:43 +00:00
parent c629d3b9d6
commit 4b05912f0b
15 changed files with 215 additions and 97 deletions

View File

@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.8 1997/09/18 20:21:11 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.9 1998/01/04 04:31:29 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -46,6 +46,13 @@ OffsetVarNodes(Node *node, int offset)
OffsetVarNodes(tle->expr, offset);
}
break;
case T_Aggreg:
{
Aggreg *agg = (Aggreg *) node;
OffsetVarNodes(agg->target, offset);
}
break;
case T_Expr:
{
Expr *expr = (Expr *) node;
@ -91,6 +98,13 @@ ChangeVarNodes(Node *node, int old_varno, int new_varno)
ChangeVarNodes(tle->expr, old_varno, new_varno);
}
break;
case T_Aggreg:
{
Aggreg *agg = (Aggreg *) node;
ChangeVarNodes(agg->target, old_varno, new_varno);
}
break;
case T_Expr:
{
Expr *expr = (Expr *) node;
@ -235,6 +249,9 @@ ResolveNew(RewriteInfo *info, List *targetlist, Node **nodePtr)
case T_TargetEntry:
ResolveNew(info, targetlist, &((TargetEntry *) node)->expr);
break;
case T_Aggreg:
ResolveNew(info, targetlist, &((Aggreg *) node)->target);
break;
case T_Expr:
ResolveNew(info, targetlist, (Node **) (&(((Expr *) node)->args)));
break;
@ -325,6 +342,14 @@ nodeHandleRIRAttributeRule(Node **nodePtr,
rt_index, attr_num, modified, badsql);
}
break;
case T_Aggreg:
{
Aggreg *agg = (Aggreg *) node;
nodeHandleRIRAttributeRule(&agg->target, rtable, targetlist,
rt_index, attr_num, modified, badsql);
}
break;
case T_Expr:
{
Expr *expr = (Expr *) node;
@ -395,11 +420,16 @@ HandleRIRAttributeRule(Query *parsetree,
int *modified,
int *badsql)
{
int i;
nodeHandleRIRAttributeRule((Node **) (&(parsetree->targetList)), rtable,
targetlist, rt_index, attr_num,
modified, badsql);
nodeHandleRIRAttributeRule(&parsetree->qual, rtable, targetlist,
rt_index, attr_num, modified, badsql);
for(i=0; i < parsetree->qry_numAgg; i++)
nodeHandleRIRAttributeRule(&parsetree->qry_aggs[i]->target, rtable,
targetlist, rt_index, attr_num, modified, badsql);
}
@ -437,6 +467,14 @@ nodeHandleViewRule(Node **nodePtr,
rt_index, modified);
}
break;
case T_Aggreg:
{
Aggreg *agg = (Aggreg *) node;
nodeHandleViewRule(&(agg->target), rtable, targetlist,
rt_index, modified);
}
break;
case T_Expr:
{
Expr *expr = (Expr *) node;
@ -483,8 +521,13 @@ HandleViewRule(Query *parsetree,
int rt_index,
int *modified)
{
int i;
nodeHandleViewRule(&parsetree->qual, rtable, targetlist, rt_index,
modified);
nodeHandleViewRule((Node **) (&(parsetree->targetList)), rtable, targetlist,
rt_index, modified);
for(i=0; i < parsetree->qry_numAgg; i++)
nodeHandleViewRule(&parsetree->qry_aggs[i]->target, rtable, targetlist, rt_index,
modified);
}