From 8fba397f0ca7b9a1fd59ab2b676c057dde4f8219 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 31 Mar 2019 15:49:06 -0400 Subject: [PATCH] Add test case exercising formerly-unreached code in inheritance_planner. There was some debate about whether the code I'd added to remap AppendRelInfos obtained from the initial SELECT planning run is actually necessary. Add a test case demonstrating that it is. Discussion: https://postgr.es/m/23831.1553873385@sss.pgh.pa.us --- src/test/regress/expected/updatable_views.out | 57 +++++++++++++++++++ src/test/regress/sql/updatable_views.sql | 13 +++++ 2 files changed, 70 insertions(+) diff --git a/src/test/regress/expected/updatable_views.out b/src/test/regress/expected/updatable_views.out index 6ce058f312..86a2642d39 100644 --- a/src/test/regress/expected/updatable_views.out +++ b/src/test/regress/expected/updatable_views.out @@ -1542,10 +1542,67 @@ SELECT * FROM base_tbl_child ORDER BY a; 20 (6 rows) +CREATE TABLE other_tbl_parent (id int); +CREATE TABLE other_tbl_child () INHERITS (other_tbl_parent); +INSERT INTO other_tbl_parent VALUES (7),(200); +INSERT INTO other_tbl_child VALUES (8),(100); +EXPLAIN (costs off) +UPDATE rw_view1 SET a = a + 1000 FROM other_tbl_parent WHERE a = id; + QUERY PLAN +-------------------------------------------------------------- + Update on base_tbl_parent + Update on base_tbl_parent + Update on base_tbl_child + -> Hash Join + Hash Cond: (other_tbl_parent.id = base_tbl_parent.a) + -> Append + -> Seq Scan on other_tbl_parent + -> Seq Scan on other_tbl_child + -> Hash + -> Seq Scan on base_tbl_parent + -> Merge Join + Merge Cond: (base_tbl_child.a = other_tbl_parent.id) + -> Sort + Sort Key: base_tbl_child.a + -> Seq Scan on base_tbl_child + -> Sort + Sort Key: other_tbl_parent.id + -> Append + -> Seq Scan on other_tbl_parent + -> Seq Scan on other_tbl_child +(20 rows) + +UPDATE rw_view1 SET a = a + 1000 FROM other_tbl_parent WHERE a = id; +SELECT * FROM ONLY base_tbl_parent ORDER BY a; + a +------ + -200 + -100 + -40 + -30 + -20 + -10 + 1100 + 1200 +(8 rows) + +SELECT * FROM base_tbl_child ORDER BY a; + a +------ + 3 + 4 + 10 + 20 + 1007 + 1008 +(6 rows) + DROP TABLE base_tbl_parent, base_tbl_child CASCADE; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to view rw_view1 drop cascades to view rw_view2 +DROP TABLE other_tbl_parent CASCADE; +NOTICE: drop cascades to table other_tbl_child -- simple WITH CHECK OPTION CREATE TABLE base_tbl (a int, b int DEFAULT 10); INSERT INTO base_tbl VALUES (1,2), (2,3), (1,-1); diff --git a/src/test/regress/sql/updatable_views.sql b/src/test/regress/sql/updatable_views.sql index f5f88a1116..e50a4c52ee 100644 --- a/src/test/regress/sql/updatable_views.sql +++ b/src/test/regress/sql/updatable_views.sql @@ -713,7 +713,20 @@ DELETE FROM ONLY rw_view2 WHERE a IN (-8, 8); -- Should delete -8 only SELECT * FROM ONLY base_tbl_parent ORDER BY a; SELECT * FROM base_tbl_child ORDER BY a; +CREATE TABLE other_tbl_parent (id int); +CREATE TABLE other_tbl_child () INHERITS (other_tbl_parent); +INSERT INTO other_tbl_parent VALUES (7),(200); +INSERT INTO other_tbl_child VALUES (8),(100); + +EXPLAIN (costs off) +UPDATE rw_view1 SET a = a + 1000 FROM other_tbl_parent WHERE a = id; +UPDATE rw_view1 SET a = a + 1000 FROM other_tbl_parent WHERE a = id; + +SELECT * FROM ONLY base_tbl_parent ORDER BY a; +SELECT * FROM base_tbl_child ORDER BY a; + DROP TABLE base_tbl_parent, base_tbl_child CASCADE; +DROP TABLE other_tbl_parent CASCADE; -- simple WITH CHECK OPTION -- 2.40.0