]> granicus.if.org Git - postgresql/commitdiff
Repair for bug #691 --- CREATE TABLE AS column aliases fail to be
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 13 Jun 2002 02:04:46 +0000 (02:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 13 Jun 2002 02:04:46 +0000 (02:04 +0000)
applied when the select is a UNION (or other set-operation).

An alternative route to a fix would be to leave analyze.c alone and
change plan_set_operations in prepunion.c to take column names from
the topmost targetlist.  But I am not sure that would work in all
cases.  This patch seems the minimum-risk fix.

src/backend/parser/analyze.c

index 916067a1d0484e6a1b79697726c9221a387e53dc..1eb5627a8fb3ddfb59426c89cef7634f620511cc 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *     $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.235 2002/05/28 22:15:42 tgl Exp $
+ *     $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.236 2002/06/13 02:04:46 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2212,8 +2212,16 @@ transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
                qry->isBinary = FALSE;
        }
 
+       /*
+        * Any column names from CREATE TABLE AS need to be attached to both the
+        * top level and the leftmost subquery.  We do not do this earlier
+        * because we do *not* want the targetnames list to be affected.
+        */
        if (intoColNames)
+       {
                applyColumnNames(qry->targetList, intoColNames);
+               applyColumnNames(leftmostQuery->targetList, intoColNames);
+       }
 
        /*
         * As a first step towards supporting sort clauses that are