diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 546acd243b..0daf62b540 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -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.