aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1996-11-29 15:56:18 +0000
committerBruce Momjian <bruce@momjian.us>1996-11-29 15:56:18 +0000
commita3d773a69320a92812d5dc7a5489db3ec77e2845 (patch)
tree91ec6b5ff556a44d4aecc74f7aeb4c8bd73730a6 /src
parenta962c6128f7e2ea008d8b6cbd1f7f05903d9c6c1 (diff)
downloadpostgresql-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.c17
-rw-r--r--src/backend/parser/gram.y27
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; }