From 782df58a1cafbef5defb329a7583dfa0154dfe72 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 30 Apr 2006 01:08:07 +0000
Subject: [PATCH] Revert patch pending more discussion:

Disallow changing DEFAULT expression of a SERIAL column.
---
 doc/TODO                         |  4 +-
 doc/src/FAQ/TODO.html            |  4 +-
 src/backend/catalog/dependency.c | 88 +-------------------------------
 src/backend/catalog/heap.c       | 49 +-----------------
 src/backend/commands/tablecmds.c |  7 +--
 src/include/catalog/dependency.h |  5 +-
 src/include/catalog/heap.h       |  5 +-
 7 files changed, 9 insertions(+), 153 deletions(-)

diff --git a/doc/TODO b/doc/TODO
index f521408438f..cf9892e8a9c 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 facd289a3f9..3f40254ed91 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 3e50d27e381..3493c6c70b9 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 9803720a83e..e4514c37ea2 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 1ed5fa9bbba..f670ccf14eb 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 4915c8dfd72..1276ef0cacc 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 f503589f183..4d17a054235 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 */
-- 
GitLab