Un-break table creation.
authorTom Lane
Wed, 22 May 2002 15:35:43 +0000 (15:35 +0000)
committerTom Lane
Wed, 22 May 2002 15:35:43 +0000 (15:35 +0000)
src/backend/catalog/heap.c

index 546acd243b472c5af4ebc27d1bdec75532ca870c..0daf62b5407708415061993396175f6f89bbd205 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.202 2002/05/22 07:46:58 inoue Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.203 2002/05/22 15:35:43 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -353,7 +353,7 @@ heap_storage_create(Relation rel)
  * --------------------------------
  */
 static void
-CheckAttributeNames(TupleDesc tupdesc, bool relhasoids, int relkind)
+CheckAttributeNames(TupleDesc tupdesc, bool relhasoids, char relkind)
 {
    int         i;
    int         j;
@@ -362,21 +362,30 @@ CheckAttributeNames(TupleDesc tupdesc, bool relhasoids, int relkind)
    /*
     * first check for collision with system attribute names
     *
-    * also, warn user if attribute to be created has an unknown typid
-    * (usually as a result of a 'retrieve into' - jolly
+    * Skip this for a view, since it doesn't have system attributes.
     */
    if (relkind != RELKIND_VIEW)
+   {
        for (i = 0; i < natts; i++)
        {
            if (SystemAttributeByName(NameStr(tupdesc->attrs[i]->attname),
-                                 relhasoids) != NULL)
+                                     relhasoids) != NULL)
                elog(ERROR, "name of column \"%s\" conflicts with an existing system column",
-                NameStr(tupdesc->attrs[i]->attname));
-           if (tupdesc->attrs[i]->atttypid == UNKNOWNOID)
-               elog(WARNING, "Attribute '%s' has an unknown type"
+                    NameStr(tupdesc->attrs[i]->attname));
+       }
+   }
+
+   /*
+    * also, warn user if attribute to be created has an unknown typid
+    * (usually as a result of a 'retrieve into' - jolly
+    */
+   for (i = 0; i < natts; i++)
+   {
+       if (tupdesc->attrs[i]->atttypid == UNKNOWNOID)
+           elog(WARNING, "Attribute '%s' has an unknown type"
                 "\n\tProceeding with relation creation anyway",
                 NameStr(tupdesc->attrs[i]->attname));
-       }
+   }
 
    /*
     * next check for repeated attribute names
@@ -404,7 +413,7 @@ static void
 AddNewAttributeTuples(Oid new_rel_oid,
                      TupleDesc tupdesc,
                      bool relhasoids,
-                     int   relkind)
+                     char relkind)
 {
    Form_pg_attribute *dpp;
    int         i;
@@ -454,8 +463,9 @@ AddNewAttributeTuples(Oid new_rel_oid,
    /*
     * next we add the system attributes.  Skip OID if rel has no OIDs.
     */
-   dpp = SysAtt;
    if (relkind != RELKIND_VIEW)
+   {
+       dpp = SysAtt;
        for (i = 0; i < -1 - FirstLowInvalidHeapAttributeNumber; i++)
        {
            if (relhasoids || (*dpp)->attnum != ObjectIdAttributeNumber)
@@ -463,8 +473,8 @@ AddNewAttributeTuples(Oid new_rel_oid,
                Form_pg_attribute attStruct;
 
                tup = heap_addheader(Natts_pg_attribute,
-                                ATTRIBUTE_TUPLE_SIZE,
-                                (void *) *dpp);
+                                    ATTRIBUTE_TUPLE_SIZE,
+                                    (void *) *dpp);
 
                /* Fill in the correct relation OID in the copied tuple */
                attStruct = (Form_pg_attribute) GETSTRUCT(tup);
@@ -484,7 +494,9 @@ AddNewAttributeTuples(Oid new_rel_oid,
 
                heap_freetuple(tup);
            }
+           dpp++;
        }
+   }
 
    /*
     * close pg_attribute indices
@@ -719,7 +731,8 @@ heap_create_with_catalog(const char *relname,
     * now add tuples to pg_attribute for the attributes in our new
     * relation.
     */
-   AddNewAttributeTuples(new_rel_oid, new_rel_desc->rd_att, relhasoids, relkind);
+   AddNewAttributeTuples(new_rel_oid, new_rel_desc->rd_att,
+                         relhasoids, relkind);
 
    /*
     * store constraints and defaults passed in the tupdesc, if any.