From 757b98fda828275443dfdf6e220001c9d497133a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sat, 19 Oct 2002 03:01:09 +0000 Subject: [PATCH] Back out Alvaro's patch until regression tests pass. --- src/backend/commands/tablecmds.c | 45 +++++++--------------------------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 90be92ff0f..52e2ee5b7c 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 -- 2.11.0