summaryrefslogtreecommitdiff
path: root/src/test/regress
diff options
context:
space:
mode:
authorTom Lane2023-02-13 16:45:32 +0000
committerTom Lane2023-02-13 16:45:32 +0000
commitf50f029c497da35927491f16964f7aa993ecbae5 (patch)
tree7dbaed8805ac9de62c8b82e86c7108718df21a6a /src/test/regress
parentb16259b3c1897cf90855a94e5cb126d6c75e3cf3 (diff)
Fix thinkos in have_unsafe_outer_join_ref; reduce to Assert check.
Late in the development of commit 2489d76c4, I (tgl) incorrectly concluded that the new function have_unsafe_outer_join_ref couldn't ever reach its inner loop. That should be the case if the inner rel's parameterization is based on just one Var, but it could be based on Vars from several relations, and then not only is the inner loop reachable but it's wrongly coded. Despite those errors, it still appears that the whole thing is redundant given previous join_is_legal checks, so let's arrange to only run it in assert-enabled builds. Diagnosis and patch by Richard Guo, per fuzz testing by Justin Pryzby. Discussion: https://postgr.es/m/20230212235823.GW1653@telsasoft.com
Diffstat (limited to 'src/test/regress')
-rw-r--r--src/test/regress/expected/join.out26
-rw-r--r--src/test/regress/sql/join.sql17
2 files changed, 43 insertions, 0 deletions
diff --git a/src/test/regress/expected/join.out b/src/test/regress/expected/join.out
index 2f1f8b8dbe6..db9512969f3 100644
--- a/src/test/regress/expected/join.out
+++ b/src/test/regress/expected/join.out
@@ -4653,6 +4653,32 @@ where tt1.f1 = ss1.c0;
----------
(0 rows)
+explain (verbose, costs off)
+select 1 from
+ int4_tbl as i4
+ inner join
+ ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1
+ right join (select 1 as z) as ss2 on true)
+ on false,
+ lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;
+ QUERY PLAN
+--------------------------
+ Result
+ Output: 1
+ One-Time Filter: false
+(3 rows)
+
+select 1 from
+ int4_tbl as i4
+ inner join
+ ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1
+ right join (select 1 as z) as ss2 on true)
+ on false,
+ lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;
+ ?column?
+----------
+(0 rows)
+
--
-- check a case in which a PlaceHolderVar forces join order
--
diff --git a/src/test/regress/sql/join.sql b/src/test/regress/sql/join.sql
index 400c16958f3..2ff68879d22 100644
--- a/src/test/regress/sql/join.sql
+++ b/src/test/regress/sql/join.sql
@@ -1609,6 +1609,23 @@ select 1 from
lateral (select tt4.f1 as c0 from text_tbl as tt5 limit 1) as ss1
where tt1.f1 = ss1.c0;
+explain (verbose, costs off)
+select 1 from
+ int4_tbl as i4
+ inner join
+ ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1
+ right join (select 1 as z) as ss2 on true)
+ on false,
+ lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;
+
+select 1 from
+ int4_tbl as i4
+ inner join
+ ((select 42 as n from int4_tbl x1 left join int8_tbl x2 on f1 = q1) as ss1
+ right join (select 1 as z) as ss2 on true)
+ on false,
+ lateral (select i4.f1, ss1.n from int8_tbl as i8 limit 1) as ss3;
+
--
-- check a case in which a PlaceHolderVar forces join order
--