From 2759f8deefc89e40eb6a299540961aa5e8fd6b61 Mon Sep 17 00:00:00 2001
From: Mark Dilger <mark.dilger@enterprisedb.com>
Date: Mon, 16 Mar 2020 08:53:32 -0700
Subject: [PATCH v1] Adding missing Object Access hook invocations.

There appears to be no reason for skipping the invocation of the
object access hook infrastructure for the following commands, yet
they were lacking the InvokeObject{PostCreate,PostAlter,Drop}Hook
calls that would be expected:

ALTER RULE
ALTER USER MAPPING
CREATE ACCESS METHOD
CREATE STATISTICS
DROP STATISTICS
DROP ACCESS METHOD

There doesn't seem to be any good regression test coverage for
when and how the object_access_hook is invoked, so no additional
coverage is included here, either.  Adding regression test
coverage seems like another patch to be submitted separately.
---
 src/backend/commands/amcmds.c       | 5 +++++
 src/backend/commands/foreigncmds.c  | 3 +++
 src/backend/commands/statscmds.c    | 4 ++++
 src/backend/rewrite/rewriteDefine.c | 2 ++
 4 files changed, 14 insertions(+)

diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c
index 7546378bbb..1ecad090ee 100644
--- a/src/backend/commands/amcmds.c
+++ b/src/backend/commands/amcmds.c
@@ -18,6 +18,7 @@
 #include "catalog/catalog.h"
 #include "catalog/dependency.h"
 #include "catalog/indexing.h"
+#include "catalog/objectaccess.h"
 #include "catalog/pg_am.h"
 #include "catalog/pg_proc.h"
 #include "catalog/pg_type.h"
@@ -107,6 +108,8 @@ CreateAccessMethod(CreateAmStmt *stmt)
 
 	recordDependencyOnCurrentExtension(&myself, false);
 
+	InvokeObjectPostCreateHook(AccessMethodRelationId, amoid, 0);
+
 	table_close(rel, RowExclusiveLock);
 
 	return myself;
@@ -134,6 +137,8 @@ RemoveAccessMethodById(Oid amOid)
 
 	CatalogTupleDelete(relation, &tup->t_self);
 
+	InvokeObjectDropHook(AccessMethodRelationId, amOid, 0);
+
 	ReleaseSysCache(tup);
 
 	table_close(relation, RowExclusiveLock);
diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c
index f197869752..a399ab4de9 100644
--- a/src/backend/commands/foreigncmds.c
+++ b/src/backend/commands/foreigncmds.c
@@ -1343,6 +1343,9 @@ AlterUserMapping(AlterUserMappingStmt *stmt)
 
 	CatalogTupleUpdate(rel, &tp->t_self, tp);
 
+	InvokeObjectPostAlterHook(UserMappingRelationId,
+							  umId, 0);
+
 	ObjectAddressSet(address, UserMappingRelationId, umId);
 
 	heap_freetuple(tp);
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 988cdba6f5..08d0da1109 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -374,6 +374,8 @@ CreateStatistics(CreateStatsStmt *stmt)
 
 	relation_close(datarel, RowExclusiveLock);
 
+	InvokeObjectPostCreateHook(StatisticExtRelationId, statoid, 0);
+
 	/*
 	 * Invalidate relcache so that others see the new statistics object.
 	 */
@@ -568,6 +570,8 @@ RemoveStatisticsById(Oid statsOid)
 
 	CatalogTupleDelete(relation, &tup->t_self);
 
+	InvokeObjectDropHook(StatisticExtRelationId, statsOid, 0);
+
 	ReleaseSysCache(tup);
 
 	table_close(relation, RowExclusiveLock);
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c
index afc78b3316..9989df1107 100644
--- a/src/backend/rewrite/rewriteDefine.c
+++ b/src/backend/rewrite/rewriteDefine.c
@@ -1003,6 +1003,8 @@ RenameRewriteRule(RangeVar *relation, const char *oldName,
 
 	CatalogTupleUpdate(pg_rewrite_desc, &ruletup->t_self, ruletup);
 
+	InvokeObjectPostAlterHook(RewriteRelationId, ruleOid, 0);
+
 	heap_freetuple(ruletup);
 	table_close(pg_rewrite_desc, RowExclusiveLock);
 
-- 
2.21.1 (Apple Git-122.3)

