diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-06-05 03:49:20 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-06-05 03:49:20 +0000 |
commit | 2e6159311ace7a0bdbc82bdb3c537ba16aea5e4d (patch) | |
tree | 92043869bf43071abdcf918e1bbef6576daa1bc1 /src/backend/parser/parse_clause.c | |
parent | a576a60e3f24e6c7a81442f0e7c8615e43819d8a (diff) | |
download | postgresql-2e6159311ace7a0bdbc82bdb3c537ba16aea5e4d.tar.gz postgresql-2e6159311ace7a0bdbc82bdb3c537ba16aea5e4d.zip |
I made several adjustments to my earlier patch to handle the
condition where the target label is ambiguous.
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r-- | src/backend/parser/parse_clause.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 8fb8e185587..aad47e077b3 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.17 1998/05/29 14:00:19 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.18 1998/06/05 03:49:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -194,17 +194,32 @@ find_targetlist_entry(ParseState *pstate, SortGroupBy *sortgroupby, List *tlist) * it will not be projected into the final tuple. * daveh@insightdist.com 5/20/98 */ - if ( ! target_result) { + if ( ! target_result && sortgroupby->name) { List *p_target = tlist; - Ident *missingTargetId = (Ident *)makeNode(Ident); TargetEntry *tent = makeNode(TargetEntry); - /* Fill in the constructed Ident node */ - missingTargetId->type = T_Ident; - missingTargetId->name = palloc(strlen(sortgroupby->name) + 1); - strcpy(missingTargetId->name, sortgroupby->name); - transformTargetId(pstate, missingTargetId, tent, missingTargetId->name, TRUE); + if (sortgroupby->range) { + Attr *missingTarget = (Attr *)makeNode(Attr); + missingTarget->type = T_Attr; + + missingTarget->relname = palloc(strlen(sortgroupby->range) + 1); + strcpy(missingTarget->relname, sortgroupby->range); + + missingTarget->attrs = lcons(makeString(sortgroupby->name), NIL); + + transformTargetId(pstate, (Node*)missingTarget, tent, sortgroupby->name, TRUE); + } + else { + Ident *missingTarget = (Ident *)makeNode(Ident); + missingTarget->type = T_Ident; + + missingTarget->name = palloc(strlen(sortgroupby->name) + 1); + strcpy(missingTarget->name, sortgroupby->name); + + transformTargetId(pstate, (Node*)missingTarget, tent, sortgroupby->name, TRUE); + } + /* Add to the end of the target list */ while (lnext(p_target) != NIL) { |