diff options
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 8f365f2efbe..008402e26f3 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.21 1999/07/17 20:17:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.22 1999/08/21 03:48:53 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -41,6 +41,7 @@ #include "postgres.h" #include "executor/spi.h" #include "optimizer/clauses.h" +#include "optimizer/tlist.h" #include "utils/lsyscache.h" #include "catalog/pg_shadow.h" #include "catalog/pg_index.h" @@ -1248,23 +1249,11 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) case T_GroupClause: { GroupClause *grp = (GroupClause *) node; - List *l; - TargetEntry *tle = NULL; - - 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"); + Node *groupexpr; - return get_rule_expr(qh, rt_index, (Node *) tle, varprefix); + groupexpr = get_sortgroupclause_expr(grp, + qh->query->targetList); + return get_rule_expr(qh, rt_index, groupexpr, varprefix); } break; |