diff --git a/doc/TODO b/doc/TODO index f521408438f4550e3e7661d9713fc6633457d671..cf9892e8a9c8eddb8ee10e5a95efd932bd95c3e4 100644 --- a/doc/TODO +++ b/doc/TODO @@ -2,7 +2,7 @@ PostgreSQL TODO List ==================== Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) -Last updated: Sat Apr 29 12:44:26 EDT 2006 +Last updated: Thu Apr 27 11:56:04 EDT 2006 The most recent version of this document can be viewed at http://www.postgresql.org/docs/faqs.TODO.html. @@ -200,7 +200,7 @@ Data Types The positive modulus result returned by NUMERICs might be considered inaccurate, in one sense. -* -Disallow changing default expression of a SERIAL column +* %Disallow changing default expression of a SERIAL column * %Disallow ALTER SEQUENCE changes for SERIAL sequences because pg_dump does not dump the changes * Fix data types where equality comparison isn't intuitive, e.g. box diff --git a/doc/src/FAQ/TODO.html b/doc/src/FAQ/TODO.html index facd289a3f9aea0c77a95fcb5045e95544778763..3f40254ed9120ad12a4cd5a388f6e1ed16db3ccc 100644 --- a/doc/src/FAQ/TODO.html +++ b/doc/src/FAQ/TODO.html @@ -8,7 +8,7 @@ <body bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000" alink="#0000FF"> <h1><a name="section_1">PostgreSQL TODO List</a></h1> <p>Current maintainer: Bruce Momjian (<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br/> -Last updated: Sat Apr 29 12:44:26 EDT 2006 +Last updated: Thu Apr 27 11:56:04 EDT 2006 </p> <p>The most recent version of this document can be viewed at<br/> <a href="http://www.postgresql.org/docs/faqs.TODO.html">http://www.postgresql.org/docs/faqs.TODO.html</a>. @@ -185,7 +185,7 @@ first. inaccurate, in one sense. </p> <ul> - <li>-<em>Disallow changing default expression of a SERIAL column</em> + <li>%Disallow changing default expression of a SERIAL column </li><li>%Disallow ALTER SEQUENCE changes for SERIAL sequences because pg_dump does not dump the changes </li><li>Fix data types where equality comparison isn't intuitive, e.g. box diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 3e50d27e381ed520fd5c381ed450647e082ef261..3493c6c70b9dd938ffd46b43a79a0d2917a680c9 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.52 2006/04/29 16:43:54 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.53 2006/04/30 01:08:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1931,89 +1931,3 @@ getRelationDescription(StringInfo buffer, Oid relid) ReleaseSysCache(relTup); } - -/* Recursively travel and search for the default sequence. Finally detach it */ - -void performSequenceDefaultDeletion(const ObjectAddress *object, - DropBehavior behavior, int deleteFlag) -{ - - ScanKeyData key[3]; - int nkeys; - SysScanDesc scan; - HeapTuple tup; - ObjectAddress otherObject; - Relation depRel; - - depRel = heap_open(DependRelationId, RowExclusiveLock); - - ScanKeyInit(&key[0], - Anum_pg_depend_classid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->classId)); - ScanKeyInit(&key[1], - Anum_pg_depend_objid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(object->objectId)); - if (object->objectSubId != 0) - { - ScanKeyInit(&key[2], - Anum_pg_depend_objsubid, - BTEqualStrategyNumber, F_INT4EQ, - Int32GetDatum(object->objectSubId)); - nkeys = 3; - } - else - nkeys = 2; - - scan = systable_beginscan(depRel, DependDependerIndexId, true, - SnapshotNow, nkeys, key); - - while (HeapTupleIsValid(tup = systable_getnext(scan))) - { - - Form_pg_depend foundDep = (Form_pg_depend) GETSTRUCT(tup); - - otherObject.classId = foundDep->refclassid; - otherObject.objectId = foundDep->refobjid; - otherObject.objectSubId = foundDep->refobjsubid; - - /* Detach the default sequence from the relation */ - if(deleteFlag == 1) - { - simple_heap_delete(depRel, &tup->t_self); - break; - } - - switch (foundDep->deptype) - { - case DEPENDENCY_NORMAL: - { - - if(getObjectClass(&otherObject) == OCLASS_CLASS) - { - /* Dont allow to change the default sequence */ - if(deleteFlag == 2) - { - systable_endscan(scan); - heap_close(depRel, RowExclusiveLock); - elog(ERROR, "%s is a SERIAL sequence. Can't alter the relation", getObjectDescription(&otherObject)); - return; - } - else /* Detach the default sequence from the relation */ - { - performSequenceDefaultDeletion(&otherObject, behavior, 1); - systable_endscan(scan); - heap_close(depRel, RowExclusiveLock); - return; - } - } - } - - } - } - - systable_endscan(scan); - heap_close(depRel, RowExclusiveLock); - -} diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 9803720a83e7cc61015d21564f667cca097d636b..e4514c37ea24b0bbc42a4891c83e92e80339ea59 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.297 2006/04/29 16:43:54 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.298 2006/04/30 01:08:06 momjian Exp $ * * * INTERFACE ROUTINES @@ -2136,50 +2136,3 @@ heap_truncate_find_FKs(List *relationIds) return result; } - - -/* Detach the default sequence and the relation */ - -void -RemoveSequenceDefault(Oid relid, AttrNumber attnum, - DropBehavior behavior, bool flag) -{ - Relation attrdef_rel; - ScanKeyData scankeys[2]; - SysScanDesc scan; - HeapTuple tuple; - - attrdef_rel = heap_open(AttrDefaultRelationId, RowExclusiveLock); - - ScanKeyInit(&scankeys[0], - Anum_pg_attrdef_adrelid, - BTEqualStrategyNumber, F_OIDEQ, - ObjectIdGetDatum(relid)); - ScanKeyInit(&scankeys[1], - Anum_pg_attrdef_adnum, - BTEqualStrategyNumber, F_INT2EQ, - Int16GetDatum(attnum)); - - scan = systable_beginscan(attrdef_rel, AttrDefaultIndexId, true, - SnapshotNow, 2, scankeys); - - /* There should be at most one matching tuple, but we loop anyway */ - while (HeapTupleIsValid(tuple = systable_getnext(scan))) - { - ObjectAddress object; - - object.classId = AttrDefaultRelationId; - object.objectId = HeapTupleGetOid(tuple); - object.objectSubId = 0; - - if(flag == true) /* Detach the sequence */ - performSequenceDefaultDeletion(&object, behavior, 0); - else /* Don't allow to change the default sequence */ - performSequenceDefaultDeletion(&object, behavior, 2); - - } - - systable_endscan(scan); - heap_close(attrdef_rel, RowExclusiveLock); - -} diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1ed5fa9bbba6cc771dbcfdaeaf9f6ee9b1e90a45..f670ccf14eb02fe165ddd982b7c98b193b16c287 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.182 2006/04/29 16:43:54 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.183 2006/04/30 01:08:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -3362,11 +3362,6 @@ ATExecColumnDefault(Relation rel, const char *colName, * safety, but at present we do not expect anything to depend on the * default. */ - if (newDefault) - RemoveSequenceDefault(RelationGetRelid(rel), attnum, DROP_RESTRICT, false); - else - RemoveSequenceDefault(RelationGetRelid(rel), attnum, DROP_RESTRICT, true); - RemoveAttrDefault(RelationGetRelid(rel), attnum, DROP_RESTRICT, false); if (newDefault) diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h index 4915c8dfd72eebca696c902b064418d0ecbea03f..1276ef0cacc7d13004dc264b0ba66353ad7f03ec 100644 --- a/src/include/catalog/dependency.h +++ b/src/include/catalog/dependency.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.22 2006/04/29 16:43:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.23 2006/04/30 01:08:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -207,7 +207,4 @@ extern void shdepDropOwned(List *relids, DropBehavior behavior); extern void shdepReassignOwned(List *relids, Oid newrole); -extern void performSequenceDefaultDeletion(const ObjectAddress *object, - DropBehavior behavior, int deleteFlag); - #endif /* DEPENDENCY_H */ diff --git a/src/include/catalog/heap.h b/src/include/catalog/heap.h index f503589f1832e3368fc2c05b6f242c0213ed9c69..4d17a054235f71bd90e55c41fe0068a83ae7a8e7 100644 --- a/src/include/catalog/heap.h +++ b/src/include/catalog/heap.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.79 2006/04/29 16:43:54 momjian Exp $ + * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.80 2006/04/30 01:08:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -97,7 +97,4 @@ extern void CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind); extern void CheckAttributeType(const char *attname, Oid atttypid); -extern void RemoveSequenceDefault(Oid relid, AttrNumber attnum, - DropBehavior behavior, bool flag); - #endif /* HEAP_H */