Back out Alvaro's patch until regression tests pass.
authorBruce Momjian
Sat, 19 Oct 2002 03:01:09 +0000 (03:01 +0000)
committerBruce Momjian
Sat, 19 Oct 2002 03:01:09 +0000 (03:01 +0000)
src/backend/commands/tablecmds.c

index 90be92ff0fbf51b37ebeab2b18062cece3208ea0..52e2ee5b7c1692b398e6420f1c1666048eb922ce 100644 (file)
@@ -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