aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_clause.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-06-05 03:49:20 +0000
committerBruce Momjian <bruce@momjian.us>1998-06-05 03:49:20 +0000
commit2e6159311ace7a0bdbc82bdb3c537ba16aea5e4d (patch)
tree92043869bf43071abdcf918e1bbef6576daa1bc1 /src/backend/parser/parse_clause.c
parenta576a60e3f24e6c7a81442f0e7c8615e43819d8a (diff)
downloadpostgresql-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.c31
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) {