From 9e6a4f5630378fe20c506de5b23bd9e900e2e7c2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 7 Oct 2022 13:34:15 +0200 Subject: [PATCH] Simplify event trigger support checking functions Before, we listed all possible object classes/types (ObjectClass, ObjectType) in a switch statement to decide which of them support event triggers. But by now, all object types support event triggers, with specific exceptions: shared objects don't support them, and event triggers themselves don't. So we can make these functions simpler and clearer by just checking for those exceptions. --- src/backend/catalog/dependency.c | 2 +- src/backend/commands/event_trigger.c | 122 +++------------------------ src/include/commands/event_trigger.h | 2 +- 3 files changed, 12 insertions(+), 114 deletions(-) diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 7f3e64b5ae61..d1604d0a59ff 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -255,7 +255,7 @@ deleteObjectsInList(ObjectAddresses *targetObjects, Relation *depRel, if (extra->flags & DEPFLAG_REVERSE) normal = true; - if (EventTriggerSupportsObjectClass(getObjectClass(thisobj))) + if (EventTriggerSupportsObject(thisobj)) { EventTriggerSQLDropAddObject(thisobj, original, normal); } diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 441f29d684ff..215390e140be 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -945,128 +945,26 @@ EventTriggerSupportsObjectType(ObjectType obtype) case OBJECT_EVENT_TRIGGER: /* no support for event triggers on event triggers */ return false; - case OBJECT_ACCESS_METHOD: - case OBJECT_AGGREGATE: - case OBJECT_AMOP: - case OBJECT_AMPROC: - case OBJECT_ATTRIBUTE: - case OBJECT_CAST: - case OBJECT_COLUMN: - case OBJECT_COLLATION: - case OBJECT_CONVERSION: - case OBJECT_DEFACL: - case OBJECT_DEFAULT: - case OBJECT_DOMAIN: - case OBJECT_DOMCONSTRAINT: - case OBJECT_EXTENSION: - case OBJECT_FDW: - case OBJECT_FOREIGN_SERVER: - case OBJECT_FOREIGN_TABLE: - case OBJECT_FUNCTION: - case OBJECT_INDEX: - case OBJECT_LANGUAGE: - case OBJECT_LARGEOBJECT: - case OBJECT_MATVIEW: - case OBJECT_OPCLASS: - case OBJECT_OPERATOR: - case OBJECT_OPFAMILY: - case OBJECT_POLICY: - case OBJECT_PROCEDURE: - case OBJECT_PUBLICATION: - case OBJECT_PUBLICATION_NAMESPACE: - case OBJECT_PUBLICATION_REL: - case OBJECT_ROUTINE: - case OBJECT_RULE: - case OBJECT_SCHEMA: - case OBJECT_SEQUENCE: - case OBJECT_SUBSCRIPTION: - case OBJECT_STATISTIC_EXT: - case OBJECT_TABCONSTRAINT: - case OBJECT_TABLE: - case OBJECT_TRANSFORM: - case OBJECT_TRIGGER: - case OBJECT_TSCONFIGURATION: - case OBJECT_TSDICTIONARY: - case OBJECT_TSPARSER: - case OBJECT_TSTEMPLATE: - case OBJECT_TYPE: - case OBJECT_USER_MAPPING: - case OBJECT_VIEW: + default: return true; - - /* - * There's intentionally no default: case here; we want the - * compiler to warn if a new ObjectType hasn't been handled above. - */ } - - /* Shouldn't get here, but if we do, say "no support" */ - return false; } /* * Do event triggers support this object class? */ bool -EventTriggerSupportsObjectClass(ObjectClass objclass) +EventTriggerSupportsObject(const ObjectAddress *object) { - switch (objclass) - { - case OCLASS_DATABASE: - case OCLASS_TBLSPACE: - case OCLASS_ROLE: - case OCLASS_ROLE_MEMBERSHIP: - case OCLASS_PARAMETER_ACL: - /* no support for global objects */ - return false; - case OCLASS_EVENT_TRIGGER: - /* no support for event triggers on event triggers */ - return false; - case OCLASS_CLASS: - case OCLASS_PROC: - case OCLASS_TYPE: - case OCLASS_CAST: - case OCLASS_COLLATION: - case OCLASS_CONSTRAINT: - case OCLASS_CONVERSION: - case OCLASS_DEFAULT: - case OCLASS_LANGUAGE: - case OCLASS_LARGEOBJECT: - case OCLASS_OPERATOR: - case OCLASS_OPCLASS: - case OCLASS_OPFAMILY: - case OCLASS_AM: - case OCLASS_AMOP: - case OCLASS_AMPROC: - case OCLASS_REWRITE: - case OCLASS_TRIGGER: - case OCLASS_SCHEMA: - case OCLASS_STATISTIC_EXT: - case OCLASS_TSPARSER: - case OCLASS_TSDICT: - case OCLASS_TSTEMPLATE: - case OCLASS_TSCONFIG: - case OCLASS_FDW: - case OCLASS_FOREIGN_SERVER: - case OCLASS_USER_MAPPING: - case OCLASS_DEFACL: - case OCLASS_EXTENSION: - case OCLASS_POLICY: - case OCLASS_PUBLICATION: - case OCLASS_PUBLICATION_NAMESPACE: - case OCLASS_PUBLICATION_REL: - case OCLASS_SUBSCRIPTION: - case OCLASS_TRANSFORM: - return true; + /* no support for global objects */ + if (IsSharedRelation(object->classId)) + return false; - /* - * There's intentionally no default: case here; we want the - * compiler to warn if a new OCLASS hasn't been handled above. - */ - } + /* no support for event triggers on event triggers */ + if (object->classId == EventTriggerRelationId) + return false; - /* Shouldn't get here, but if we do, say "no support" */ - return false; + return true; } /* @@ -1178,7 +1076,7 @@ EventTriggerSQLDropAddObject(const ObjectAddress *object, bool original, bool no if (!currentEventTriggerState) return; - Assert(EventTriggerSupportsObjectClass(getObjectClass(object))); + Assert(EventTriggerSupportsObject(object)); /* don't report temp schemas except my own */ if (object->classId == NamespaceRelationId && diff --git a/src/include/commands/event_trigger.h b/src/include/commands/event_trigger.h index 10091c3aafd5..f030dfbd9641 100644 --- a/src/include/commands/event_trigger.h +++ b/src/include/commands/event_trigger.h @@ -49,7 +49,7 @@ extern ObjectAddress AlterEventTriggerOwner(const char *name, Oid newOwnerId); extern void AlterEventTriggerOwner_oid(Oid, Oid newOwnerId); extern bool EventTriggerSupportsObjectType(ObjectType obtype); -extern bool EventTriggerSupportsObjectClass(ObjectClass objclass); +extern bool EventTriggerSupportsObject(const ObjectAddress *object); extern void EventTriggerDDLCommandStart(Node *parsetree); extern void EventTriggerDDLCommandEnd(Node *parsetree); extern void EventTriggerSQLDrop(Node *parsetree); -- 2.37.3