]> granicus.if.org Git - postgresql/commitdiff
Revert patch, doesn't do what it should:
authorBruce Momjian <bruce@momjian.us>
Tue, 27 Jun 2006 18:35:05 +0000 (18:35 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 27 Jun 2006 18:35:05 +0000 (18:35 +0000)
* %Disallow changing default expression of a SERIAL column

Dhanaraj M

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 bb72892fb43c1198af7220bdacae4b0a1fe3e768..5b5732ed4ce657780f899224b148390d4c242d84 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -208,7 +208,11 @@ 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?
+
+  This should be done only if the existing SERIAL problems cannot be
+  fixed.
+
 * %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 a3144b2f24fd3eb6e42344e2d5ebfa890c3e5c25..f5a46f16db40e094ff718462d8ee8e85a0ff44b9 100644 (file)
@@ -190,7 +190,10 @@ 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?
+<p>  This should be done only if the existing SERIAL problems cannot be
+  fixed.
+</p>
   </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
index bf39e8d1e1dbdd229ac2735c78453e1a7b6a7d4a..20798fe3b1af10907c89b7c056ec502b5acfc212 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.55 2006/06/27 03:21:54 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.56 2006/06/27 18:35:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1927,89 +1927,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 79898aa473ef47223dbdc41478fa76ca75fa16ac..6cd15e3ac99ec4246a6eee3acf9ca051b77174f2 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.300 2006/06/27 03:21:54 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.301 2006/06/27 18:35:05 momjian Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -2133,50 +2133,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 3192dd32f0ad941da6f99b941196b1ed0f050fe7..27dbf5451157179d6450d329b80cc0377713994c 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.187 2006/06/27 03:43:19 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.188 2006/06/27 18:35:05 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3404,11 +3404,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 dd35ddc8011ee2aa7e584d82c312a0a594f6e85c..fbfe40e472f428235fd2beb1c6c34d1c695fc00e 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.24 2006/06/27 03:21:55 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/dependency.h,v 1.25 2006/06/27 18:35:05 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 8489f88ebc7fc9e3c230f6e4047ddf742efb434f..9edcdb21fbc87f97bc130941c80996b3fa7c6119 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.81 2006/06/27 03:21:55 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.82 2006/06/27 18:35:05 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 */