diff --git a/src/test/regress/expected/for_portion_of.out b/src/test/regress/expected/for_portion_of.out index 31f772c7..b862e5d4 100644 --- a/src/test/regress/expected/for_portion_of.out +++ b/src/test/regress/expected/for_portion_of.out @@ -2097,4 +2097,26 @@ SELECT * FROM temporal_partitioned_5 ORDER BY id, valid_at; (4 rows) DROP TABLE temporal_partitioned; +-- Test: FOR PORTION OF should be rejected on views with INSTEAD OF triggers +CREATE TABLE fpo_instead_base (id int, valid_at daterange, val int); +INSERT INTO fpo_instead_base VALUES (1, '[2024-01-01,2024-12-31)', 100); +CREATE VIEW fpo_instead_view AS SELECT * FROM fpo_instead_base; +CREATE FUNCTION fpo_instead_trig_fn() RETURNS trigger LANGUAGE plpgsql AS $$ +BEGIN + RETURN NEW; +END; +$$; +CREATE TRIGGER fpo_instead_trig INSTEAD OF UPDATE ON fpo_instead_view + FOR EACH ROW EXECUTE FUNCTION fpo_instead_trig_fn(); +CREATE TRIGGER fpo_instead_del_trig INSTEAD OF DELETE ON fpo_instead_view + FOR EACH ROW EXECUTE FUNCTION fpo_instead_trig_fn(); +-- These should produce clean error messages, not crash the server +UPDATE fpo_instead_view FOR PORTION OF valid_at FROM '2024-04-01' TO '2024-08-01' + SET val = 999 WHERE id = 1; -- error +ERROR: FOR PORTION OF is not supported on views with INSTEAD OF triggers +DELETE FROM fpo_instead_view FOR PORTION OF valid_at FROM '2024-04-01' TO '2024-08-01' + WHERE id = 1; -- error +ERROR: FOR PORTION OF is not supported on views with INSTEAD OF triggers +DROP VIEW fpo_instead_view; +DROP TABLE fpo_instead_base; RESET datestyle; diff --git a/src/test/regress/sql/for_portion_of.sql b/src/test/regress/sql/for_portion_of.sql index d4062acf..77610e5f 100644 --- a/src/test/regress/sql/for_portion_of.sql +++ b/src/test/regress/sql/for_portion_of.sql @@ -1365,4 +1365,25 @@ SELECT * FROM temporal_partitioned_5 ORDER BY id, valid_at; DROP TABLE temporal_partitioned; +-- Test: FOR PORTION OF should be rejected on views with INSTEAD OF triggers +CREATE TABLE fpo_instead_base (id int, valid_at daterange, val int); +INSERT INTO fpo_instead_base VALUES (1, '[2024-01-01,2024-12-31)', 100); +CREATE VIEW fpo_instead_view AS SELECT * FROM fpo_instead_base; +CREATE FUNCTION fpo_instead_trig_fn() RETURNS trigger LANGUAGE plpgsql AS $$ +BEGIN + RETURN NEW; +END; +$$; +CREATE TRIGGER fpo_instead_trig INSTEAD OF UPDATE ON fpo_instead_view + FOR EACH ROW EXECUTE FUNCTION fpo_instead_trig_fn(); +CREATE TRIGGER fpo_instead_del_trig INSTEAD OF DELETE ON fpo_instead_view + FOR EACH ROW EXECUTE FUNCTION fpo_instead_trig_fn(); +-- These should produce clean error messages, not crash the server +UPDATE fpo_instead_view FOR PORTION OF valid_at FROM '2024-04-01' TO '2024-08-01' + SET val = 999 WHERE id = 1; -- error +DELETE FROM fpo_instead_view FOR PORTION OF valid_at FROM '2024-04-01' TO '2024-08-01' + WHERE id = 1; -- error +DROP VIEW fpo_instead_view; +DROP TABLE fpo_instead_base; + RESET datestyle;