diff options
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 016d835ade5..1158fdc7b55 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * out of it's tuple * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.11 1999/05/10 00:45:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.12 1999/05/12 15:01:58 wieck Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -1263,9 +1263,23 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) case T_GroupClause: { GroupClause *grp = (GroupClause *) node; + List *l; + TargetEntry *tle = NULL; - return get_rule_expr(qh, rt_index, - (Node *) (grp->entry), varprefix); + foreach(l, qh->query->targetList) + { + if (((TargetEntry *)lfirst(l))->resdom->resgroupref == + grp->tleGroupref) + { + tle = (TargetEntry *)lfirst(l); + break; + } + } + + if (tle == NULL) + elog(ERROR, "GROUP BY expression not found in targetlist"); + + return get_rule_expr(qh, rt_index, (Node *)tle, varprefix); } break; @@ -1738,12 +1752,7 @@ check_if_rte_used(int rt_index, Node *node, int sup) break; case T_GroupClause: - { - GroupClause *grp = (GroupClause *) node; - - return check_if_rte_used(rt_index, - (Node *) (grp->entry), sup); - } + return FALSE; break; case T_Expr: |