diff options
author | Bruce Momjian <bruce@momjian.us> | 1996-11-29 15:56:18 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1996-11-29 15:56:18 +0000 |
commit | a3d773a69320a92812d5dc7a5489db3ec77e2845 (patch) | |
tree | 91ec6b5ff556a44d4aecc74f7aeb4c8bd73730a6 /src | |
parent | a962c6128f7e2ea008d8b6cbd1f7f05903d9c6c1 (diff) | |
download | postgresql-a3d773a69320a92812d5dc7a5489db3ec77e2845.tar.gz postgresql-a3d773a69320a92812d5dc7a5489db3ec77e2845.zip |
Allow select oid,* from table. Allow * anywhere in target list.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/parser/analyze.c | 17 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 27 |
2 files changed, 23 insertions, 21 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 9704b94965e..05f9c091ad5 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.16 1996/11/26 03:17:45 bryanh Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.17 1996/11/29 15:56:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1127,10 +1127,14 @@ transformTargetList(ParseState *pstate, List *targetlist) * (eg. SELECT * FROM emp) */ if (att->relname!=NULL && !strcmp(att->relname, "*")) { - if(lnext(targetlist)!=NULL) - elog(WARN, "cannot expand target list *, ..."); - p_target = expandAllTables(pstate); + if (tail_p_target == NIL) + p_target = tail_p_target = expandAllTables(pstate); + else + lnext(tail_p_target) = expandAllTables(pstate); + while(lnext(tail_p_target)!=NIL) + /* make sure we point to the last target entry */ + tail_p_target = lnext(tail_p_target); /* * skip rest of while loop */ @@ -1147,14 +1151,13 @@ transformTargetList(ParseState *pstate, List *targetlist) /* tail_p_target is the target list we're building in the while * loop. Make sure we fix it after appending more nodes. */ - if (tail_p_target == NIL) { + if (tail_p_target == NIL) p_target = tail_p_target = expandAll(pstate, att->relname, att->relname, &pstate->p_last_resno); - } else { + else lnext(tail_p_target) = expandAll(pstate, att->relname, att->relname, &pstate->p_last_resno); - } while(lnext(tail_p_target)!=NIL) /* make sure we point to the last target entry */ tail_p_target = lnext(tail_p_target); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index da8f5244d1c..677d08a0358 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.18 1996/11/28 05:46:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.19 1996/11/29 15:56:18 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -1935,19 +1935,6 @@ res_target_list2: { $$ = lappend($1, $3); } | res_target_el2 { $$ = lcons($1, NIL); } - | '*' - { - ResTarget *rt = makeNode(ResTarget); - Attr *att = makeNode(Attr); - att->relname = "*"; - att->paramNo = NULL; - att->attrs = NULL; - att->indirection = NIL; - rt->name = NULL; - rt->indirection = NULL; - rt->val = (Node *)att; - $$ = lcons(rt, NIL); - } ; /* AS is not optional because shift/red conflict with unary ops */ @@ -1977,6 +1964,18 @@ res_target_el2: a_expr AS Id $$->indirection = NULL; $$->val = (Node *)att; } + | '*' + { + Attr *att = makeNode(Attr); + att->relname = "*"; + att->paramNo = NULL; + att->attrs = NULL; + att->indirection = NIL; + $$ = makeNode(ResTarget); + $$->name = NULL; + $$->indirection = NULL; + $$->val = (Node *)att; + } ; opt_id: Id { $$ = $1; } |