summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/plpgsql.out22
-rw-r--r--src/test/regress/sql/plpgsql.sql26
2 files changed, 48 insertions, 0 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index d294e536345..722715049c9 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -5559,6 +5559,28 @@ LINE 1: SELECT (SELECT string_agg(id || '=' || name, ',') FROM d)
QUERY: SELECT (SELECT string_agg(id || '=' || name, ',') FROM d)
CONTEXT: PL/pgSQL function alter_table_under_transition_tables_upd_func() line 3 at RAISE
--
+-- Test multiple reference to a transition table
+--
+CREATE TABLE multi_test (i int);
+INSERT INTO multi_test VALUES (1);
+CREATE OR REPLACE FUNCTION multi_test_trig() RETURNS trigger
+LANGUAGE plpgsql AS $$
+BEGIN
+ RAISE NOTICE 'count = %', (SELECT COUNT(*) FROM new_test);
+ RAISE NOTICE 'count union = %',
+ (SELECT COUNT(*)
+ FROM (SELECT * FROM new_test UNION ALL SELECT * FROM new_test) ss);
+ RETURN NULL;
+END$$;
+CREATE TRIGGER my_trigger AFTER UPDATE ON multi_test
+ REFERENCING NEW TABLE AS new_test OLD TABLE as old_test
+ FOR EACH STATEMENT EXECUTE PROCEDURE multi_test_trig();
+UPDATE multi_test SET i = i;
+NOTICE: count = 1
+NOTICE: count union = 2
+DROP TABLE multi_test;
+DROP FUNCTION multi_test_trig();
+--
-- Check type parsing and record fetching from partitioned tables
--
CREATE TABLE partitioned_table (a int, b text) PARTITION BY LIST (a);
diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql
index f17cf0b49bf..f405d157bba 100644
--- a/src/test/regress/sql/plpgsql.sql
+++ b/src/test/regress/sql/plpgsql.sql
@@ -4504,6 +4504,32 @@ UPDATE alter_table_under_transition_tables
SET id = id;
--
+-- Test multiple reference to a transition table
+--
+
+CREATE TABLE multi_test (i int);
+INSERT INTO multi_test VALUES (1);
+
+CREATE OR REPLACE FUNCTION multi_test_trig() RETURNS trigger
+LANGUAGE plpgsql AS $$
+BEGIN
+ RAISE NOTICE 'count = %', (SELECT COUNT(*) FROM new_test);
+ RAISE NOTICE 'count union = %',
+ (SELECT COUNT(*)
+ FROM (SELECT * FROM new_test UNION ALL SELECT * FROM new_test) ss);
+ RETURN NULL;
+END$$;
+
+CREATE TRIGGER my_trigger AFTER UPDATE ON multi_test
+ REFERENCING NEW TABLE AS new_test OLD TABLE as old_test
+ FOR EACH STATEMENT EXECUTE PROCEDURE multi_test_trig();
+
+UPDATE multi_test SET i = i;
+
+DROP TABLE multi_test;
+DROP FUNCTION multi_test_trig();
+
+--
-- Check type parsing and record fetching from partitioned tables
--