aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/commands/tablecmds.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 7b0b35840ee..e256a92833d 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.113 2004/06/10 17:55:56 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.114 2004/06/10 18:25:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -199,6 +199,8 @@ static void ATPrepAddColumn(List **wqueue, Relation rel, bool recurse,
static void ATExecAddColumn(AlteredTableInfo *tab, Relation rel,
ColumnDef *colDef);
static void add_column_datatype_dependency(Oid relid, int32 attnum, Oid typid);
+static void add_column_support_dependency(Oid relid, int32 attnum,
+ RangeVar *support);
static void ATExecDropNotNull(Relation rel, const char *colName);
static void ATExecSetNotNull(AlteredTableInfo *tab, Relation rel,
const char *colName);
@@ -438,20 +440,9 @@ DefineRelation(CreateStmt *stmt, char relkind)
rawDefaults = lappend(rawDefaults, rawEnt);
}
+ /* Create dependency for supporting relation for this column */
if (colDef->support != NULL)
- {
- /* Create dependency for supporting relation for this column */
- ObjectAddress colobject,
- suppobject;
-
- colobject.classId = RelOid_pg_class;
- colobject.objectId = relationId;
- colobject.objectSubId = attnum;
- suppobject.classId = RelOid_pg_class;
- suppobject.objectId = RangeVarGetRelid(colDef->support, false);
- suppobject.objectSubId = 0;
- recordDependencyOn(&suppobject, &colobject, DEPENDENCY_INTERNAL);
- }
+ add_column_support_dependency(relationId, attnum, colDef->support);
}
/*
@@ -2926,9 +2917,11 @@ ATExecAddColumn(AlteredTableInfo *tab, Relation rel,
}
/*
- * Add datatype dependency for the new column.
+ * Add needed dependency entries for the new column.
*/
add_column_datatype_dependency(myrelid, i, attribute->atttypid);
+ if (colDef->support != NULL)
+ add_column_support_dependency(myrelid, i, colDef->support);
}
/*
@@ -2950,6 +2943,24 @@ add_column_datatype_dependency(Oid relid, int32 attnum, Oid typid)
}
/*
+ * Install a dependency for a column's supporting relation (serial sequence).
+ */
+static void
+add_column_support_dependency(Oid relid, int32 attnum, RangeVar *support)
+{
+ ObjectAddress colobject,
+ suppobject;
+
+ colobject.classId = RelOid_pg_class;
+ colobject.objectId = relid;
+ colobject.objectSubId = attnum;
+ suppobject.classId = RelOid_pg_class;
+ suppobject.objectId = RangeVarGetRelid(support, false);
+ suppobject.objectSubId = 0;
+ recordDependencyOn(&suppobject, &colobject, DEPENDENCY_INTERNAL);
+}
+
+/*
* ALTER TABLE ALTER COLUMN DROP NOT NULL
*/
static void