From 90119a3ea6dfa6ca28d02c30dbdce370e8f0a3a6 Mon Sep 17 00:00:00 2001
From: Mark Dilger <mark.dilger@enterprisedb.com>
Date: Thu, 19 Mar 2020 11:35:09 -0700
Subject: [PATCH v3] 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 InvokeObjectPost{Create,Alter}Hook calls that would
be expected:

ALTER RULE
ALTER USER MAPPING
CREATE ACCESS METHOD
CREATE STATISTICS

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       | 3 +++
 src/backend/commands/foreigncmds.c  | 3 +++
 src/backend/commands/statscmds.c    | 2 ++
 src/backend/rewrite/rewriteDefine.c | 2 ++
 4 files changed, 10 insertions(+)

diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c
index 7546378bbb..b884bfa0b0 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;
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..d30059d043 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.
 	 */
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)

