Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 99867e7

Browse files
committed
Backpatch regression tests added by 2d689ba
A new plpgsql test function was added in 14 and up to cover for a bugfix that was not backpatchable. We can add it to older versions as a way to cover other bits of DDL event triggers, with an exception clause to avoid the problematic corner case. Originally authored by Michaël Paquier. Backpatch: 10 through 13. Discussion: https://postgr.es/m/202205201523.7m5jbfvyanmj@alvherre.pgsql
1 parent 227c180 commit 99867e7

File tree

2 files changed

+82
-5
lines changed

2 files changed

+82
-5
lines changed

src/test/regress/expected/event_trigger.out

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ SELECT * FROM dropped_objects WHERE type = 'schema';
366366
DROP ROLE regress_evt_user;
367367
DROP EVENT TRIGGER regress_event_trigger_drop_objects;
368368
DROP EVENT TRIGGER undroppable;
369+
-- Event triggers on relations.
369370
CREATE OR REPLACE FUNCTION event_trigger_report_dropped()
370371
RETURNS event_trigger
371372
LANGUAGE plpgsql
@@ -384,41 +385,92 @@ BEGIN
384385
END; $$;
385386
CREATE EVENT TRIGGER regress_event_trigger_report_dropped ON sql_drop
386387
EXECUTE PROCEDURE event_trigger_report_dropped();
388+
CREATE OR REPLACE FUNCTION event_trigger_report_end()
389+
RETURNS event_trigger
390+
LANGUAGE plpgsql
391+
AS $$
392+
DECLARE r RECORD;
393+
BEGIN
394+
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands()
395+
LOOP
396+
RAISE NOTICE 'END: command_tag=% type=% identity=%',
397+
r.command_tag, r.object_type, r.object_identity;
398+
END LOOP;
399+
EXCEPTION WHEN SQLSTATE 'XX000' THEN
400+
RAISE NOTICE 'END: got internal exception';
401+
END; $$;
402+
CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end
403+
EXECUTE PROCEDURE event_trigger_report_end();
387404
CREATE SCHEMA evttrig
388-
CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two')
405+
CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL)
389406
CREATE INDEX one_idx ON one (col_b)
390-
CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42);
407+
CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42)
408+
CREATE TABLE id (col_d int NOT NULL GENERATED ALWAYS AS IDENTITY);
409+
NOTICE: END: command_tag=CREATE SCHEMA type=schema identity=evttrig
410+
NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.one_col_a_seq
411+
NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.one_col_c_seq
412+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.one
413+
NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.one_pkey
414+
NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.one_col_a_seq
415+
NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.one_col_c_seq
416+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.two
417+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.two
418+
NOTICE: END: command_tag=CREATE SEQUENCE type=sequence identity=evttrig.id_col_d_seq
419+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.id
420+
NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.id_col_d_seq
421+
NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.one_idx
391422
-- Partitioned tables with a partitioned index
392423
CREATE TABLE evttrig.parted (
393424
id int PRIMARY KEY)
394425
PARTITION BY RANGE (id);
426+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.parted
427+
NOTICE: END: command_tag=CREATE INDEX type=index identity=evttrig.parted_pkey
395428
CREATE TABLE evttrig.part_1_10 PARTITION OF evttrig.parted (id)
396429
FOR VALUES FROM (1) TO (10);
430+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_1_10
397431
CREATE TABLE evttrig.part_10_20 PARTITION OF evttrig.parted (id)
398432
FOR VALUES FROM (10) TO (20) PARTITION BY RANGE (id);
433+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_10_20
399434
CREATE TABLE evttrig.part_10_15 PARTITION OF evttrig.part_10_20 (id)
400435
FOR VALUES FROM (10) TO (15);
436+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_10_15
401437
CREATE TABLE evttrig.part_15_20 PARTITION OF evttrig.part_10_20 (id)
402438
FOR VALUES FROM (15) TO (20);
439+
NOTICE: END: command_tag=CREATE TABLE type=table identity=evttrig.part_15_20
403440
ALTER TABLE evttrig.two DROP COLUMN col_c;
404441
NOTICE: NORMAL: orig=t normal=f istemp=f type=table column identity=evttrig.two.col_c name={evttrig,two,col_c} args={}
405442
NOTICE: NORMAL: orig=f normal=t istemp=f type=table constraint identity=two_col_c_check on evttrig.two name={evttrig,two,two_col_c_check} args={}
443+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.two
406444
ALTER TABLE evttrig.one ALTER COLUMN col_b DROP DEFAULT;
407445
NOTICE: NORMAL: orig=t normal=f istemp=f type=default value identity=for evttrig.one.col_b name={evttrig,one,col_b} args={}
446+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one
408447
ALTER TABLE evttrig.one DROP CONSTRAINT one_pkey;
409448
NOTICE: NORMAL: orig=t normal=f istemp=f type=table constraint identity=one_pkey on evttrig.one name={evttrig,one,one_pkey} args={}
449+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one
450+
ALTER TABLE evttrig.one DROP COLUMN col_c;
451+
NOTICE: NORMAL: orig=t normal=f istemp=f type=table column identity=evttrig.one.col_c name={evttrig,one,col_c} args={}
452+
NOTICE: NORMAL: orig=f normal=t istemp=f type=default value identity=for evttrig.one.col_c name={evttrig,one,col_c} args={}
453+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.one
454+
ALTER TABLE evttrig.id ALTER COLUMN col_d SET DATA TYPE bigint;
455+
NOTICE: END: command_tag=ALTER SEQUENCE type=sequence identity=evttrig.id_col_d_seq
456+
NOTICE: END: command_tag=ALTER TABLE type=table identity=evttrig.id
457+
ALTER TABLE evttrig.id ALTER COLUMN col_d DROP IDENTITY,
458+
ALTER COLUMN col_d SET DATA TYPE int;
459+
NOTICE: END: got internal exception
410460
DROP INDEX evttrig.one_idx;
411461
NOTICE: NORMAL: orig=t normal=f istemp=f type=index identity=evttrig.one_idx name={evttrig,one_idx} args={}
412462
DROP SCHEMA evttrig CASCADE;
413-
NOTICE: drop cascades to 3 other objects
463+
NOTICE: drop cascades to 4 other objects
414464
DETAIL: drop cascades to table evttrig.one
415465
drop cascades to table evttrig.two
466+
drop cascades to table evttrig.id
416467
drop cascades to table evttrig.parted
417468
NOTICE: NORMAL: orig=t normal=f istemp=f type=schema identity=evttrig name={evttrig} args={}
418469
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.one name={evttrig,one} args={}
419470
NOTICE: NORMAL: orig=f normal=t istemp=f type=sequence identity=evttrig.one_col_a_seq name={evttrig,one_col_a_seq} args={}
420471
NOTICE: NORMAL: orig=f normal=t istemp=f type=default value identity=for evttrig.one.col_a name={evttrig,one,col_a} args={}
421472
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.two name={evttrig,two} args={}
473+
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.id name={evttrig,id} args={}
422474
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.parted name={evttrig,parted} args={}
423475
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_1_10 name={evttrig,part_1_10} args={}
424476
NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_10_20 name={evttrig,part_10_20} args={}
@@ -427,6 +479,7 @@ NOTICE: NORMAL: orig=f normal=t istemp=f type=table identity=evttrig.part_15_20
427479
DROP TABLE a_temp_tbl;
428480
NOTICE: NORMAL: orig=t normal=f istemp=t type=table identity=pg_temp.a_temp_tbl name={pg_temp,a_temp_tbl} args={}
429481
DROP EVENT TRIGGER regress_event_trigger_report_dropped;
482+
DROP EVENT TRIGGER regress_event_trigger_report_end;
430483
-- only allowed from within an event trigger function, should fail
431484
select pg_event_trigger_table_rewrite_oid();
432485
ERROR: pg_event_trigger_table_rewrite_oid() can only be called in a table_rewrite event trigger function

src/test/regress/sql/event_trigger.sql

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ DROP ROLE regress_evt_user;
273273
DROP EVENT TRIGGER regress_event_trigger_drop_objects;
274274
DROP EVENT TRIGGER undroppable;
275275

276+
-- Event triggers on relations.
276277
CREATE OR REPLACE FUNCTION event_trigger_report_dropped()
277278
RETURNS event_trigger
278279
LANGUAGE plpgsql
@@ -291,10 +292,28 @@ BEGIN
291292
END; $$;
292293
CREATE EVENT TRIGGER regress_event_trigger_report_dropped ON sql_drop
293294
EXECUTE PROCEDURE event_trigger_report_dropped();
295+
CREATE OR REPLACE FUNCTION event_trigger_report_end()
296+
RETURNS event_trigger
297+
LANGUAGE plpgsql
298+
AS $$
299+
DECLARE r RECORD;
300+
BEGIN
301+
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands()
302+
LOOP
303+
RAISE NOTICE 'END: command_tag=% type=% identity=%',
304+
r.command_tag, r.object_type, r.object_identity;
305+
END LOOP;
306+
EXCEPTION WHEN SQLSTATE 'XX000' THEN
307+
RAISE NOTICE 'END: got internal exception';
308+
END; $$;
309+
CREATE EVENT TRIGGER regress_event_trigger_report_end ON ddl_command_end
310+
EXECUTE PROCEDURE event_trigger_report_end();
311+
294312
CREATE SCHEMA evttrig
295-
CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two')
313+
CREATE TABLE one (col_a SERIAL PRIMARY KEY, col_b text DEFAULT 'forty two', col_c SERIAL)
296314
CREATE INDEX one_idx ON one (col_b)
297-
CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42);
315+
CREATE TABLE two (col_c INTEGER CHECK (col_c > 0) REFERENCES one DEFAULT 42)
316+
CREATE TABLE id (col_d int NOT NULL GENERATED ALWAYS AS IDENTITY);
298317

299318
-- Partitioned tables with a partitioned index
300319
CREATE TABLE evttrig.parted (
@@ -312,11 +331,16 @@ CREATE TABLE evttrig.part_15_20 PARTITION OF evttrig.part_10_20 (id)
312331
ALTER TABLE evttrig.two DROP COLUMN col_c;
313332
ALTER TABLE evttrig.one ALTER COLUMN col_b DROP DEFAULT;
314333
ALTER TABLE evttrig.one DROP CONSTRAINT one_pkey;
334+
ALTER TABLE evttrig.one DROP COLUMN col_c;
335+
ALTER TABLE evttrig.id ALTER COLUMN col_d SET DATA TYPE bigint;
336+
ALTER TABLE evttrig.id ALTER COLUMN col_d DROP IDENTITY,
337+
ALTER COLUMN col_d SET DATA TYPE int;
315338
DROP INDEX evttrig.one_idx;
316339
DROP SCHEMA evttrig CASCADE;
317340
DROP TABLE a_temp_tbl;
318341

319342
DROP EVENT TRIGGER regress_event_trigger_report_dropped;
343+
DROP EVENT TRIGGER regress_event_trigger_report_end;
320344

321345
-- only allowed from within an event trigger function, should fail
322346
select pg_event_trigger_table_rewrite_oid();

0 commit comments

Comments
 (0)