From 405992de555a67ef91bc1c0f84e782c091bb00dd Mon Sep 17 00:00:00 2001
From: Onder Kalaci <onderkalaci@gmail.com>
Date: Tue, 9 Aug 2022 14:28:14 +0200
Subject: [PATCH] Allow MATERIALIZED VIEW Rewrite when event triggers exists

It looks like we forgot to allow table rewrite
on PG_CMDTAG. This commit fixes that.
---
 src/include/tcop/cmdtaglist.h           |  2 +-
 src/test/regress/expected/create_am.out | 13 +++++++++++++
 src/test/regress/sql/create_am.sql      | 15 +++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/include/tcop/cmdtaglist.h b/src/include/tcop/cmdtaglist.h
index 2b1163ce33..9e94f44c5f 100644
--- a/src/include/tcop/cmdtaglist.h
+++ b/src/include/tcop/cmdtaglist.h
@@ -42,7 +42,7 @@ PG_CMDTAG(CMDTAG_ALTER_FUNCTION, "ALTER FUNCTION", true, false, false)
 PG_CMDTAG(CMDTAG_ALTER_INDEX, "ALTER INDEX", true, false, false)
 PG_CMDTAG(CMDTAG_ALTER_LANGUAGE, "ALTER LANGUAGE", true, false, false)
 PG_CMDTAG(CMDTAG_ALTER_LARGE_OBJECT, "ALTER LARGE OBJECT", true, false, false)
-PG_CMDTAG(CMDTAG_ALTER_MATERIALIZED_VIEW, "ALTER MATERIALIZED VIEW", true, false, false)
+PG_CMDTAG(CMDTAG_ALTER_MATERIALIZED_VIEW, "ALTER MATERIALIZED VIEW", true, true, false)
 PG_CMDTAG(CMDTAG_ALTER_OPERATOR, "ALTER OPERATOR", true, false, false)
 PG_CMDTAG(CMDTAG_ALTER_OPERATOR_CLASS, "ALTER OPERATOR CLASS", true, false, false)
 PG_CMDTAG(CMDTAG_ALTER_OPERATOR_FAMILY, "ALTER OPERATOR FAMILY", true, false, false)
diff --git a/src/test/regress/expected/create_am.out b/src/test/regress/expected/create_am.out
index e9a9283d7a..c292d4b4c0 100644
--- a/src/test/regress/expected/create_am.out
+++ b/src/test/regress/expected/create_am.out
@@ -271,6 +271,19 @@ SELECT amname FROM pg_class c, pg_am am
  heap2
 (1 row)
 
+-- ALTER MATERIALIZED VIEW should work with event triggers as well
+CREATE OR REPLACE FUNCTION empty_event_trigger()
+  RETURNS event_trigger AS $$
+DECLARE
+BEGIN
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER empty_triggger ON sql_drop EXECUTE PROCEDURE empty_event_trigger();
+ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap;
+ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2;
+-- cleanup the trigger
+DROP FUNCTION empty_event_trigger() CASCADE;
+NOTICE:  drop cascades to event trigger empty_triggger
 SELECT COUNT(a), COUNT(1) FILTER(WHERE a=1) FROM heapmv;
  count | count 
 -------+-------
diff --git a/src/test/regress/sql/create_am.sql b/src/test/regress/sql/create_am.sql
index 256884c959..ebed6a20f9 100644
--- a/src/test/regress/sql/create_am.sql
+++ b/src/test/regress/sql/create_am.sql
@@ -177,6 +177,21 @@ SELECT amname FROM pg_class c, pg_am am
 ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2;
 SELECT amname FROM pg_class c, pg_am am
   WHERE c.relam = am.oid AND c.oid = 'heapmv'::regclass;
+
+-- ALTER MATERIALIZED VIEW should work with event triggers as well
+CREATE OR REPLACE FUNCTION empty_event_trigger()
+  RETURNS event_trigger AS $$
+DECLARE
+BEGIN
+END;
+$$ LANGUAGE plpgsql;
+CREATE EVENT TRIGGER empty_triggger ON sql_drop EXECUTE PROCEDURE empty_event_trigger();
+ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap;
+ALTER MATERIALIZED VIEW heapmv SET ACCESS METHOD heap2;
+
+-- cleanup the trigger
+DROP FUNCTION empty_event_trigger() CASCADE;
+
 SELECT COUNT(a), COUNT(1) FILTER(WHERE a=1) FROM heapmv;
 -- No support for multiple subcommands
 ALTER TABLE heaptable SET ACCESS METHOD heap, SET ACCESS METHOD heap2;
-- 
2.34.1

