]> granicus.if.org Git - postgresql/commitdiff
Allow select oid,* from table. Allow * anywhere in target list.
authorBruce Momjian <bruce@momjian.us>
Fri, 29 Nov 1996 15:56:18 +0000 (15:56 +0000)
committerBruce Momjian <bruce@momjian.us>
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; }