From d920bf318553290ee8dd9d19b379c7e3e1814d56 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Sun, 30 Sep 2018 20:33:36 +0300 Subject: [PATCH] Also support event triggers on CREATE PROTOCOL. We don't particularly care about event triggers on CREATE PROTOCOL as such, but we were tripping the assertion in EventTriggerCommonSetup(), because it was being called for CREATE PROTOCOL, even though it was listed as not supported. It seems to actually work fine, if we just mark it as suppported, so might as well. Add a test case, also for the CREATE EXTERNAL TABLE support. --- src/backend/commands/event_trigger.c | 4 ++-- .../regress/expected/event_trigger_gp.out | 21 +++++++++++++++++++ src/test/regress/greenplum_schedule | 3 +++ src/test/regress/sql/event_trigger_gp.sql | 20 ++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/test/regress/expected/event_trigger_gp.out create mode 100644 src/test/regress/sql/event_trigger_gp.sql diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 2045d9c9a0..ec52963917 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -103,7 +103,7 @@ static event_trigger_support_data event_trigger_support[] = { /* GPDB additions */ {"EXTERNAL TABLE", true}, - {"PROTOCOL", false}, + {"PROTOCOL", true}, {NULL, false} }; @@ -953,8 +953,8 @@ EventTriggerSupportsObjectType(ObjectType obtype) /* GPDB additions */ case OBJECT_EXTTABLE: - return true; case OBJECT_EXTPROTOCOL: + return true; case OBJECT_RESQUEUE: case OBJECT_RESGROUP: return false; diff --git a/src/test/regress/expected/event_trigger_gp.out b/src/test/regress/expected/event_trigger_gp.out new file mode 100644 index 0000000000..52626c8e30 --- /dev/null +++ b/src/test/regress/expected/event_trigger_gp.out @@ -0,0 +1,21 @@ +create or replace function test_event_trigger() returns event_trigger as $$ +BEGIN + RAISE NOTICE 'test_event_trigger: % %', tg_event, tg_tag; +END +$$ language plpgsql; +create event trigger regress_event_trigger on ddl_command_start + execute procedure test_event_trigger(); +-- Test event triggers on GPDB specific objects +CREATE EXTERNAL WEB TABLE echotest (x text) EXECUTE 'echo foo;' FORMAT 'text'; +NOTICE: test_event_trigger: ddl_command_start CREATE EXTERNAL TABLE +DROP EXTERNAL TABLE echotest; +NOTICE: test_event_trigger: ddl_command_start DROP EXTERNAL TABLE +CREATE OR REPLACE FUNCTION write_to_file() RETURNS integer as '$libdir/gpextprotocol.so', 'demoprot_export' LANGUAGE C STABLE NO SQL; +NOTICE: test_event_trigger: ddl_command_start CREATE FUNCTION +CREATE OR REPLACE FUNCTION read_from_file() RETURNS integer as '$libdir/gpextprotocol.so', 'demoprot_import' LANGUAGE C STABLE NO SQL; +NOTICE: test_event_trigger: ddl_command_start CREATE FUNCTION +CREATE PROTOCOL demoprot_event_trig_test (readfunc = 'read_from_file', writefunc = 'write_to_file'); +NOTICE: test_event_trigger: ddl_command_start CREATE PROTOCOL +DROP PROTOCOL demoprot_event_trig_test; +NOTICE: test_event_trigger: ddl_command_start DROP PROTOCOL +drop event trigger regress_event_trigger; diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index 10dcdcaf4e..597900fe5f 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -34,6 +34,9 @@ test: indexjoin as_alias regex_gp gpparams with_clause transient_types gp_rules # dispatch should always run seperately from other cases. test: dispatch +# event triggers cannot run concurrently with any test that runs DDL +test: event_trigger_gp + # test partially distributed tables test: partial_table diff --git a/src/test/regress/sql/event_trigger_gp.sql b/src/test/regress/sql/event_trigger_gp.sql new file mode 100644 index 0000000000..48ba17d9ea --- /dev/null +++ b/src/test/regress/sql/event_trigger_gp.sql @@ -0,0 +1,20 @@ +create or replace function test_event_trigger() returns event_trigger as $$ +BEGIN + RAISE NOTICE 'test_event_trigger: % %', tg_event, tg_tag; +END +$$ language plpgsql; + +create event trigger regress_event_trigger on ddl_command_start + execute procedure test_event_trigger(); + +-- Test event triggers on GPDB specific objects +CREATE EXTERNAL WEB TABLE echotest (x text) EXECUTE 'echo foo;' FORMAT 'text'; +DROP EXTERNAL TABLE echotest; + +CREATE OR REPLACE FUNCTION write_to_file() RETURNS integer as '$libdir/gpextprotocol.so', 'demoprot_export' LANGUAGE C STABLE NO SQL; +CREATE OR REPLACE FUNCTION read_from_file() RETURNS integer as '$libdir/gpextprotocol.so', 'demoprot_import' LANGUAGE C STABLE NO SQL; + +CREATE PROTOCOL demoprot_event_trig_test (readfunc = 'read_from_file', writefunc = 'write_to_file'); +DROP PROTOCOL demoprot_event_trig_test; + +drop event trigger regress_event_trigger; -- GitLab