Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 6a76edb

Browse files
committed
Fix confusion between ObjectType and ObjectClass
Per report by Will Leinweber and Peter Eisentraut
1 parent 82b55c9 commit 6a76edb

File tree

3 files changed

+92
-3
lines changed

3 files changed

+92
-3
lines changed

src/backend/catalog/dependency.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ deleteObjectsInList(ObjectAddresses *targetObjects, Relation *depRel,
210210
ObjectAddress *thisobj = targetObjects->refs + i;
211211

212212
if ((!(flags & PERFORM_DELETION_INTERNAL)) &&
213-
EventTriggerSupportsObjectType(getObjectClass(thisobj)))
213+
EventTriggerSupportsObjectClass(getObjectClass(thisobj)))
214214
{
215215
EventTriggerSQLDropAddObject(thisobj);
216216
}

src/backend/commands/event_trigger.c

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -905,9 +905,96 @@ EventTriggerSupportsObjectType(ObjectType obtype)
905905
case OBJECT_EVENT_TRIGGER:
906906
/* no support for event triggers on event triggers */
907907
return false;
908-
default:
908+
case OBJECT_AGGREGATE:
909+
case OBJECT_ATTRIBUTE:
910+
case OBJECT_CAST:
911+
case OBJECT_COLUMN:
912+
case OBJECT_CONSTRAINT:
913+
case OBJECT_COLLATION:
914+
case OBJECT_CONVERSION:
915+
case OBJECT_DOMAIN:
916+
case OBJECT_EXTENSION:
917+
case OBJECT_FDW:
918+
case OBJECT_FOREIGN_SERVER:
919+
case OBJECT_FOREIGN_TABLE:
920+
case OBJECT_FUNCTION:
921+
case OBJECT_INDEX:
922+
case OBJECT_LANGUAGE:
923+
case OBJECT_LARGEOBJECT:
924+
case OBJECT_MATVIEW:
925+
case OBJECT_OPCLASS:
926+
case OBJECT_OPERATOR:
927+
case OBJECT_OPFAMILY:
928+
case OBJECT_RULE:
929+
case OBJECT_SCHEMA:
930+
case OBJECT_SEQUENCE:
931+
case OBJECT_TABLE:
932+
case OBJECT_TRIGGER:
933+
case OBJECT_TSCONFIGURATION:
934+
case OBJECT_TSDICTIONARY:
935+
case OBJECT_TSPARSER:
936+
case OBJECT_TSTEMPLATE:
937+
case OBJECT_TYPE:
938+
case OBJECT_VIEW:
939+
return true;
940+
}
941+
return true;
942+
}
943+
944+
/*
945+
* Do event triggers support this object class?
946+
*/
947+
bool
948+
EventTriggerSupportsObjectClass(ObjectClass objclass)
949+
{
950+
switch (objclass)
951+
{
952+
case OCLASS_DATABASE:
953+
case OCLASS_TBLSPACE:
954+
case OCLASS_ROLE:
955+
/* no support for global objects */
956+
return false;
957+
case OCLASS_EVENT_TRIGGER:
958+
/* no support for event triggers on event triggers */
959+
return false;
960+
case OCLASS_CLASS:
961+
case OCLASS_PROC:
962+
case OCLASS_TYPE:
963+
case OCLASS_CAST:
964+
case OCLASS_COLLATION:
965+
case OCLASS_CONSTRAINT:
966+
case OCLASS_CONVERSION:
967+
case OCLASS_DEFAULT:
968+
case OCLASS_LANGUAGE:
969+
case OCLASS_LARGEOBJECT:
970+
case OCLASS_OPERATOR:
971+
case OCLASS_OPCLASS:
972+
case OCLASS_OPFAMILY:
973+
case OCLASS_AMOP:
974+
case OCLASS_AMPROC:
975+
case OCLASS_REWRITE:
976+
case OCLASS_TRIGGER:
977+
case OCLASS_SCHEMA:
978+
case OCLASS_TSPARSER:
979+
case OCLASS_TSDICT:
980+
case OCLASS_TSTEMPLATE:
981+
case OCLASS_TSCONFIG:
982+
case OCLASS_FDW:
983+
case OCLASS_FOREIGN_SERVER:
984+
case OCLASS_USER_MAPPING:
985+
case OCLASS_DEFACL:
986+
case OCLASS_EXTENSION:
987+
return true;
988+
989+
case MAX_OCLASS:
990+
/*
991+
* This shouldn't ever happen, but we keep the case to avoid a
992+
* compiler warning without a "default" clause in the switch.
993+
*/
994+
Assert(false);
909995
break;
910996
}
997+
911998
return true;
912999
}
9131000

@@ -1011,7 +1098,7 @@ EventTriggerSQLDropAddObject(ObjectAddress *object)
10111098
if (!currentEventTriggerState)
10121099
return;
10131100

1014-
Assert(EventTriggerSupportsObjectType(getObjectClass(object)));
1101+
Assert(EventTriggerSupportsObjectClass(getObjectClass(object)));
10151102

10161103
/* don't report temp schemas */
10171104
if (object->classId == NamespaceRelationId &&

src/include/commands/event_trigger.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#ifndef EVENT_TRIGGER_H
1414
#define EVENT_TRIGGER_H
1515

16+
#include "catalog/dependency.h"
1617
#include "catalog/objectaddress.h"
1718
#include "catalog/pg_event_trigger.h"
1819
#include "nodes/parsenodes.h"
@@ -41,6 +42,7 @@ extern Oid AlterEventTriggerOwner(const char *name, Oid newOwnerId);
4142
extern void AlterEventTriggerOwner_oid(Oid, Oid newOwnerId);
4243

4344
extern bool EventTriggerSupportsObjectType(ObjectType obtype);
45+
extern bool EventTriggerSupportsObjectClass(ObjectClass objclass);
4446
extern void EventTriggerDDLCommandStart(Node *parsetree);
4547
extern void EventTriggerDDLCommandEnd(Node *parsetree);
4648
extern void EventTriggerSQLDrop(Node *parsetree);

0 commit comments

Comments
 (0)