summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMichael Paquier2023-08-16 23:54:17 +0000
committerMichael Paquier2023-08-16 23:54:17 +0000
commit352ea3acf8a2d6e0490eb005bce38303de4564dd (patch)
tree425769c7d3caa157844fc1700e71adc15e60c031 /src/test
parentdca20013ebab0f0176e610a36b846d899af1d451 (diff)
Add OAT hook calls for more subcommands of ALTER TABLE
The OAT hooks are added in ALTER TABLE for the following subcommands: - { ENABLE | DISABLE | [NO] FORCE } ROW LEVEL SECURITY - { ENABLE | DISABLE } TRIGGER - { ENABLE | DISABLE } RULE. Note that there was hook for pg_rewrite, but not for relation ALTER'ed in pg_class. Tests are added to test_oat_hook for all the subcommand patterns gaining hooks here. Based on an ask from Legs Mansion. Discussion: https://postgr.es/m/tencent_083B3850655AC6EE04FA0A400766D3FE8309@qq.com
Diffstat (limited to 'src/test')
-rw-r--r--src/test/modules/test_oat_hooks/Makefile2
-rw-r--r--src/test/modules/test_oat_hooks/expected/alter_table.out163
-rw-r--r--src/test/modules/test_oat_hooks/meson.build1
-rw-r--r--src/test/modules/test_oat_hooks/sql/alter_table.sql48
4 files changed, 213 insertions, 1 deletions
diff --git a/src/test/modules/test_oat_hooks/Makefile b/src/test/modules/test_oat_hooks/Makefile
index 2b5d2687f8d..dcaf3a77279 100644
--- a/src/test/modules/test_oat_hooks/Makefile
+++ b/src/test/modules/test_oat_hooks/Makefile
@@ -6,7 +6,7 @@ OBJS = \
test_oat_hooks.o
PGFILEDESC = "test_oat_hooks - example use of object access hooks"
-REGRESS = test_oat_hooks
+REGRESS = test_oat_hooks alter_table
# disable installcheck for now
NO_INSTALLCHECK = 1
diff --git a/src/test/modules/test_oat_hooks/expected/alter_table.out b/src/test/modules/test_oat_hooks/expected/alter_table.out
new file mode 100644
index 00000000000..19adb28ffb6
--- /dev/null
+++ b/src/test/modules/test_oat_hooks/expected/alter_table.out
@@ -0,0 +1,163 @@
+--
+-- OAT checks for ALTER TABLE
+--
+-- This test script fails if debug_discard_caches is enabled, because cache
+-- flushes cause extra calls of the OAT hook in recomputeNamespacePath,
+-- resulting in more NOTICE messages than are in the expected output.
+SET debug_discard_caches = 0;
+LOAD 'test_oat_hooks';
+SET test_oat_hooks.audit = true;
+NOTICE: in object_access_hook_str: superuser attempting alter (subId=0x1000, set) [test_oat_hooks.audit]
+NOTICE: in object_access_hook_str: superuser finished alter (subId=0x1000, set) [test_oat_hooks.audit]
+NOTICE: in process utility: superuser finished SET
+CREATE SCHEMA test_oat_schema;
+NOTICE: in process utility: superuser attempting CREATE SCHEMA
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in process utility: superuser finished CREATE SCHEMA
+CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text);
+NOTICE: in process utility: superuser attempting CREATE TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+LINE 1: CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text);
+ ^
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+LINE 1: CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text);
+ ^
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [no report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [no report on violation, allowed]
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in object access: superuser attempting create (subId=0x0) [internal]
+NOTICE: in object access: superuser finished create (subId=0x0) [internal]
+NOTICE: in object access: superuser attempting create (subId=0x0) [internal]
+NOTICE: in object access: superuser finished create (subId=0x0) [internal]
+NOTICE: in process utility: superuser finished CREATE TABLE
+CREATE RULE test_oat_notify AS
+ ON UPDATE TO test_oat_schema.test_oat_tab
+ DO ALSO NOTIFY test_oat_tab;
+NOTICE: in process utility: superuser attempting CREATE RULE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in process utility: superuser finished CREATE RULE
+CREATE FUNCTION test_oat_schema.test_trigger()
+RETURNS trigger
+LANGUAGE plpgsql
+AS $$
+BEGIN
+ IF TG_OP = 'DELETE'
+ THEN
+ RETURN OLD;
+ ELSE
+ RETURN NEW;
+ END IF;
+END; $$;
+NOTICE: in process utility: superuser attempting CREATE FUNCTION
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in process utility: superuser finished CREATE FUNCTION
+CREATE TRIGGER test_oat_trigger BEFORE INSERT ON test_oat_schema.test_oat_tab
+ FOR EACH STATEMENT EXECUTE FUNCTION test_oat_schema.test_trigger();
+NOTICE: in process utility: superuser attempting CREATE TRIGGER
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting create (subId=0x0) [explicit]
+NOTICE: in object access: superuser finished create (subId=0x0) [explicit]
+NOTICE: in process utility: superuser finished CREATE TRIGGER
+-- RLS
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE ROW LEVEL SECURITY;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE ROW LEVEL SECURITY;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+ALTER TABLE test_oat_schema.test_oat_tab FORCE ROW LEVEL SECURITY;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+ALTER TABLE test_oat_schema.test_oat_tab NO FORCE ROW LEVEL SECURITY;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+-- Rules
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE RULE test_oat_notify;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE RULE test_oat_notify;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+-- Triggers
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE TRIGGER test_oat_trigger;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE TRIGGER test_oat_trigger;
+NOTICE: in process utility: superuser attempting ALTER TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser attempting alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in object access: superuser finished alter (subId=0x0) [explicit without auxiliary object]
+NOTICE: in process utility: superuser finished ALTER TABLE
+DROP TABLE test_oat_schema.test_oat_tab;
+NOTICE: in process utility: superuser attempting DROP TABLE
+NOTICE: in object access: superuser attempting namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser finished namespace search (subId=0x0) [report on violation, allowed]
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in object access: superuser attempting drop (subId=0x0) []
+NOTICE: in object access: superuser finished drop (subId=0x0) []
+NOTICE: in process utility: superuser finished DROP TABLE
diff --git a/src/test/modules/test_oat_hooks/meson.build b/src/test/modules/test_oat_hooks/meson.build
index 9c69a1eaf9e..be28eb61cd1 100644
--- a/src/test/modules/test_oat_hooks/meson.build
+++ b/src/test/modules/test_oat_hooks/meson.build
@@ -23,6 +23,7 @@ tests += {
'regress': {
'sql': [
'test_oat_hooks',
+ 'alter_table',
],
'regress_args': ['--no-locale', '--encoding=UTF8'],
'runningcheck': false,
diff --git a/src/test/modules/test_oat_hooks/sql/alter_table.sql b/src/test/modules/test_oat_hooks/sql/alter_table.sql
new file mode 100644
index 00000000000..3d308a47c11
--- /dev/null
+++ b/src/test/modules/test_oat_hooks/sql/alter_table.sql
@@ -0,0 +1,48 @@
+--
+-- OAT checks for ALTER TABLE
+--
+
+-- This test script fails if debug_discard_caches is enabled, because cache
+-- flushes cause extra calls of the OAT hook in recomputeNamespacePath,
+-- resulting in more NOTICE messages than are in the expected output.
+SET debug_discard_caches = 0;
+
+LOAD 'test_oat_hooks';
+SET test_oat_hooks.audit = true;
+
+CREATE SCHEMA test_oat_schema;
+CREATE TABLE test_oat_schema.test_oat_tab (c1 int, c2 text);
+CREATE RULE test_oat_notify AS
+ ON UPDATE TO test_oat_schema.test_oat_tab
+ DO ALSO NOTIFY test_oat_tab;
+
+CREATE FUNCTION test_oat_schema.test_trigger()
+RETURNS trigger
+LANGUAGE plpgsql
+AS $$
+BEGIN
+ IF TG_OP = 'DELETE'
+ THEN
+ RETURN OLD;
+ ELSE
+ RETURN NEW;
+ END IF;
+END; $$;
+CREATE TRIGGER test_oat_trigger BEFORE INSERT ON test_oat_schema.test_oat_tab
+ FOR EACH STATEMENT EXECUTE FUNCTION test_oat_schema.test_trigger();
+
+-- RLS
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE ROW LEVEL SECURITY;
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE ROW LEVEL SECURITY;
+ALTER TABLE test_oat_schema.test_oat_tab FORCE ROW LEVEL SECURITY;
+ALTER TABLE test_oat_schema.test_oat_tab NO FORCE ROW LEVEL SECURITY;
+
+-- Rules
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE RULE test_oat_notify;
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE RULE test_oat_notify;
+
+-- Triggers
+ALTER TABLE test_oat_schema.test_oat_tab DISABLE TRIGGER test_oat_trigger;
+ALTER TABLE test_oat_schema.test_oat_tab ENABLE TRIGGER test_oat_trigger;
+
+DROP TABLE test_oat_schema.test_oat_tab;