Revert patch pending more discussion:
authorBruce Momjian
Sun, 30 Apr 2006 01:08:07 +0000 (01:08 +0000)
committerBruce Momjian
Sun, 30 Apr 2006 01:08:07 +0000 (01:08 +0000)
Disallow changing DEFAULT expression of a SERIAL column.

doc/TODO
doc/src/FAQ/TODO.html
src/backend/catalog/dependency.c
src/backend/catalog/heap.c
src/backend/commands/tablecmds.c
src/include/catalog/dependency.h
src/include/catalog/heap.h

index f521408438f4550e3e7661d9713fc6633457d671..cf9892e8a9c8eddb8ee10e5a95efd932bd95c3e4 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -2,7 +2,7 @@
 PostgreSQL TODO List
 ====================
 Current maintainer:    Bruce Momjian ([email protected])
-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
index facd289a3f9aea0c77a95fcb5045e95544778763..3f40254ed9120ad12a4cd5a388f6e1ed16db3ccc 100644 (file)
@@ -8,7 +8,7 @@
 
 

PostgreSQL TODO List

 

Current maintainer:     Bruce Momjian ([email protected])

-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.
@@ -185,7 +185,7 @@ first.
   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
  • index 3e50d27e381ed520fd5c381ed450647e082ef261..3493c6c70b9dd938ffd46b43a79a0d2917a680c9 100644 (file)
    @@ -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);   
    -
    -}
    index 9803720a83e7cc61015d21564f667cca097d636b..e4514c37ea24b0bbc42a4891c83e92e80339ea59 100644 (file)
    @@ -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);
    -
    -}
    index 1ed5fa9bbba6cc771dbcfdaeaf9f6ee9b1e90a45..f670ccf14eb02fe165ddd982b7c98b193b16c287 100644 (file)
    @@ -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)
    index 4915c8dfd72eebca696c902b064418d0ecbea03f..1276ef0cacc7d13004dc264b0ba66353ad7f03ec 100644 (file)
    @@ -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 */
    index f503589f1832e3368fc2c05b6f242c0213ed9c69..4d17a054235f71bd90e55c41fe0068a83ae7a8e7 100644 (file)
    @@ -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 */