aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-10-19 03:01:09 +0000
committerBruce Momjian <bruce@momjian.us>2002-10-19 03:01:09 +0000
commit757b98fda828275443dfdf6e220001c9d497133a (patch)
tree8b1ec959f692eb306fabb7734cccd2860cf85794 /src/backend/commands/tablecmds.c
parentc0f7dcdac10777a270eed88613a29b8e5d38a015 (diff)
downloadpostgresql-757b98fda828275443dfdf6e220001c9d497133a.tar.gz
postgresql-757b98fda828275443dfdf6e220001c9d497133a.zip
Back out Alvaro's patch until regression tests pass.
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c45
1 files changed, 7 insertions, 38 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 90be92ff0fb..52e2ee5b7c1 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.47 2002/10/19 02:25:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.48 2002/10/19 03:01:09 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1643,53 +1643,22 @@ AlterTableAddColumn(Oid myrelid,
colDefChild->inhcount = 1;
colDefChild->is_local = false;
- /* we only need direct inheritors */
- children = find_inheritance_children(myrelid);
+ /* this routine is actually in the planner */
+ children = find_all_inheritors(myrelid);
/*
- * If the child has a column with same name and type,
- * increment its attinhcount and continue. If it has
- * different type, abort. If it doesn't have a column
- * with the same name, add it.
+ * find_all_inheritors does the recursive search of the
+ * inheritance hierarchy, so all we have to do is process all of
+ * the relids in the list that it returns.
*/
foreach(child, children)
{
Oid childrelid = lfirsti(child);
- HeapTuple tuple;
- Form_pg_attribute childatt;
if (childrelid == myrelid)
continue;
- attrdesc = heap_openr(AttributeRelationName, RowExclusiveLock);
- tuple = SearchSysCacheCopyAttName(childrelid, colDef->colname);
- if (!HeapTupleIsValid(tuple))
- {
- heap_close(attrdesc, RowExclusiveLock);
- AlterTableAddColumn(childrelid, false, true, colDefChild);
- continue;
- }
- childatt = (Form_pg_attribute) GETSTRUCT(tuple);
-
- typeTuple = typenameType(colDef->typename);
- tform = (Form_pg_type) GETSTRUCT(typeTuple);
-
- if (HeapTupleGetOid(typeTuple) != childatt->atttypid ||
- colDef->typename->typmod != childatt->atttypmod)
- elog(ERROR, "ALTER TABLE: child table %u has different "
- "type for column \"%s\"",
- childrelid, colDef->colname);
-
- childatt->attinhcount++;
- simple_heap_update(attrdesc, &tuple->t_self, tuple);
- CatalogUpdateIndexes(attrdesc, tuple);
-
- elog(NOTICE, "ALTER TABLE: merging definition of column "
- "\"%s\" for child %u", colDef->colname, childrelid);
-
- heap_close(attrdesc, RowExclusiveLock);
- heap_freetuple(tuple);
- ReleaseSysCache(typeTuple);
+ AlterTableAddColumn(childrelid, false, true, colDefChild);
}
}
else