diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-01-04 04:31:43 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-01-04 04:31:43 +0000 |
commit | 4b05912f0b6aa69507bc32ac6ddaf8aeecdeb396 (patch) | |
tree | 2ff63f8cd09f1d5c628cefb16827c406ef40f014 /src/backend/rewrite/rewriteManip.c | |
parent | c629d3b9d65fdce320aba26d092bfe96274c6092 (diff) | |
download | postgresql-4b05912f0b6aa69507bc32ac6ddaf8aeecdeb396.tar.gz postgresql-4b05912f0b6aa69507bc32ac6ddaf8aeecdeb396.zip |
Fix for count(*), aggs with views and multiple tables and sum(3).
Diffstat (limited to 'src/backend/rewrite/rewriteManip.c')
-rw-r--r-- | src/backend/rewrite/rewriteManip.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index f7e3896040c..122067a2424 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -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); } |