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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy