@ -542,8 +542,7 @@ static void GetForeignKeyCheckTriggers(Relation trigrel,
Oid * insertTriggerOid ,
Oid * insertTriggerOid ,
Oid * updateTriggerOid ) ;
Oid * updateTriggerOid ) ;
static void ATExecDropConstraint ( Relation rel , const char * constrName ,
static void ATExecDropConstraint ( Relation rel , const char * constrName ,
DropBehavior behavior ,
DropBehavior behavior , bool recurse ,
bool recurse , bool recursing ,
bool missing_ok , LOCKMODE lockmode ) ;
bool missing_ok , LOCKMODE lockmode ) ;
static ObjectAddress dropconstraint_internal ( Relation rel ,
static ObjectAddress dropconstraint_internal ( Relation rel ,
HeapTuple constraintTup , DropBehavior behavior ,
HeapTuple constraintTup , DropBehavior behavior ,
@ -5236,7 +5235,7 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab,
break ;
break ;
case AT_DropConstraint : /* DROP CONSTRAINT */
case AT_DropConstraint : /* DROP CONSTRAINT */
ATExecDropConstraint ( rel , cmd - > name , cmd - > behavior ,
ATExecDropConstraint ( rel , cmd - > name , cmd - > behavior ,
cmd - > recurse , false ,
cmd - > recurse ,
cmd - > missing_ok , lockmode ) ;
cmd - > missing_ok , lockmode ) ;
break ;
break ;
case AT_AlterColumnType : /* ALTER COLUMN TYPE */
case AT_AlterColumnType : /* ALTER COLUMN TYPE */
@ -12263,8 +12262,7 @@ createForeignKeyCheckTriggers(Oid myRelOid, Oid refRelOid,
*/
*/
static void
static void
ATExecDropConstraint ( Relation rel , const char * constrName ,
ATExecDropConstraint ( Relation rel , const char * constrName ,
DropBehavior behavior ,
DropBehavior behavior , bool recurse ,
bool recurse , bool recursing ,
bool missing_ok , LOCKMODE lockmode )
bool missing_ok , LOCKMODE lockmode )
{
{
Relation conrel ;
Relation conrel ;
@ -12273,10 +12271,6 @@ ATExecDropConstraint(Relation rel, const char *constrName,
HeapTuple tuple ;
HeapTuple tuple ;
bool found = false ;
bool found = false ;
/* At top level, permission check was done in ATPrepCmd, else do it */
if ( recursing )
ATSimplePermissions ( AT_DropConstraint , rel , ATT_TABLE | ATT_FOREIGN_TABLE ) ;
conrel = table_open ( ConstraintRelationId , RowExclusiveLock ) ;
conrel = table_open ( ConstraintRelationId , RowExclusiveLock ) ;
/*
/*
@ -12302,7 +12296,7 @@ ATExecDropConstraint(Relation rel, const char *constrName,
{
{
List * readyRels = NIL ;
List * readyRels = NIL ;
dropconstraint_internal ( rel , tuple , behavior , recurse , recursing ,
dropconstraint_internal ( rel , tuple , behavior , recurse , false ,
missing_ok , & readyRels , lockmode ) ;
missing_ok , & readyRels , lockmode ) ;
found = true ;
found = true ;
}
}
@ -12353,6 +12347,10 @@ dropconstraint_internal(Relation rel, HeapTuple constraintTup, DropBehavior beha
return InvalidObjectAddress ;
return InvalidObjectAddress ;
* readyRels = lappend_oid ( * readyRels , RelationGetRelid ( rel ) ) ;
* readyRels = lappend_oid ( * readyRels , RelationGetRelid ( rel ) ) ;
/* At top level, permission check was done in ATPrepCmd, else do it */
if ( recursing )
ATSimplePermissions ( AT_DropConstraint , rel , ATT_TABLE | ATT_FOREIGN_TABLE ) ;
conrel = table_open ( ConstraintRelationId , RowExclusiveLock ) ;
conrel = table_open ( ConstraintRelationId , RowExclusiveLock ) ;
con = ( Form_pg_constraint ) GETSTRUCT ( constraintTup ) ;
con = ( Form_pg_constraint ) GETSTRUCT ( constraintTup ) ;