Allow select oid,* from table. Allow * anywhere in target list.
authorBruce Momjian <[email protected]>
Fri, 29 Nov 1996 15:56:18 +0000 (15:56 +0000)
committerBruce Momjian <[email protected]>
Fri, 29 Nov 1996 15:56:18 +0000 (15:56 +0000)
src/backend/parser/analyze.c
src/backend/parser/gram.y

index 9704b94965e12749127cd229a0617c8bcea8a300..05f9c091ad58adfe9a5908263f2b2857339dae69 100644 (file)
@@ -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);
index da8f5244d1cff9bf461c7ea1eb8c42eabe0632cf..677d08a0358f0d25c6b259707447c54948fd8cbf 100644 (file)
@@ -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; }