From b55cbf7c30bf80ea30dcec64226dfe0c4628225d Mon Sep 17 00:00:00 2001 From: shihao zhong Date: Tue, 13 Oct 2026 23:37:23 -0400 Subject: [PATCH v2 3/3] Add tests for planner restart after join removal. Cover a removed rel that keeps its TABLESAMPLE arguments, and a rel removed by self-join elimination that keeps its securityQuals. --- src/test/regress/expected/join.out | 35 ++++++++++++++++++++++++++++++ src/test/regress/sql/join.sql | 27 +++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out index d26e2bf6118..031b3037d56 100644 --- a/src/test/regress/expected/join.out +++ b/src/test/regress/expected/join.out @@ -12224,3 +12224,38 @@ WHERE s.x = s.c; (1 row) ROLLBACK; +-- A removed rel must not keep its TABLESAMPLE arguments. +CREATE TABLE jr_t (id int PRIMARY KEY, x int, y int); +CREATE TABLE jr_o (k int PRIMARY KEY, v int); +EXPLAIN (COSTS OFF) +SELECT a.id +FROM jr_t a + LEFT JOIN jr_o b2 ON b2.k = a.y + LEFT JOIN LATERAL (SELECT * FROM jr_o c + TABLESAMPLE BERNOULLI (coalesce(b2.v, 0) + 100)) s + ON s.k = a.x; + QUERY PLAN +-------------------- + Seq Scan on jr_t a +(1 row) + +DROP TABLE jr_t, jr_o; +-- A rel removed by self-join elimination must not keep its securityQuals. +CREATE TABLE sj_rls (k int PRIMARY KEY, v int); +ALTER TABLE sj_rls ENABLE ROW LEVEL SECURITY; +CREATE POLICY sj_rls_p ON sj_rls USING (v > 0); +CREATE TABLE sj_x (k int PRIMARY KEY); +CREATE ROLE regress_sj_rls_user; +GRANT SELECT ON sj_rls, sj_x TO regress_sj_rls_user; +SET ROLE regress_sj_rls_user; +EXPLAIN (COSTS OFF) +SELECT sj_x.k +FROM sj_x LEFT JOIN (sj_rls a JOIN sj_rls b ON a.k = b.k) ON sj_x.k = a.k; + QUERY PLAN +------------------ + Seq Scan on sj_x +(1 row) + +RESET ROLE; +DROP TABLE sj_rls, sj_x; +DROP ROLE regress_sj_rls_user; diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql index 94d2defd56c..de0364d0dcd 100644 --- a/src/test/regress/sql/join.sql +++ b/src/test/regress/sql/join.sql @@ -4690,3 +4690,30 @@ FROM (VALUES (1)) AS v(z) LEFT JOIN WHERE s.x = s.c; ROLLBACK; + +-- A removed rel must not keep its TABLESAMPLE arguments. +CREATE TABLE jr_t (id int PRIMARY KEY, x int, y int); +CREATE TABLE jr_o (k int PRIMARY KEY, v int); +EXPLAIN (COSTS OFF) +SELECT a.id +FROM jr_t a + LEFT JOIN jr_o b2 ON b2.k = a.y + LEFT JOIN LATERAL (SELECT * FROM jr_o c + TABLESAMPLE BERNOULLI (coalesce(b2.v, 0) + 100)) s + ON s.k = a.x; +DROP TABLE jr_t, jr_o; + +-- A rel removed by self-join elimination must not keep its securityQuals. +CREATE TABLE sj_rls (k int PRIMARY KEY, v int); +ALTER TABLE sj_rls ENABLE ROW LEVEL SECURITY; +CREATE POLICY sj_rls_p ON sj_rls USING (v > 0); +CREATE TABLE sj_x (k int PRIMARY KEY); +CREATE ROLE regress_sj_rls_user; +GRANT SELECT ON sj_rls, sj_x TO regress_sj_rls_user; +SET ROLE regress_sj_rls_user; +EXPLAIN (COSTS OFF) +SELECT sj_x.k +FROM sj_x LEFT JOIN (sj_rls a JOIN sj_rls b ON a.k = b.k) ON sj_x.k = a.k; +RESET ROLE; +DROP TABLE sj_rls, sj_x; +DROP ROLE regress_sj_rls_user; -- 2.37.1 (Apple Git-137.1)