You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Invent "join domains" to replace the below_outer_join hack.
EquivalenceClasses are now understood as applying within a "join
domain", which is a set of inner-joined relations (possibly underneath
an outer join). We no longer need to treat an EC from below an outer
join as a second-class citizen.
I have hopes of eventually being able to treat outer-join clauses via
EquivalenceClasses, by means of only applying deductions within the
EC's join domain. There are still problems in the way of that, though,
so for now the reconsider_outer_join_clause logic is still here.
I haven't been able to get rid of RestrictInfo.is_pushed_down either,
but I wonder if that could be recast using JoinDomains.
I had to hack one test case in postgres_fdw.sql to make it still test
what it was meant to, because postgres_fdw is inconsistent about
how it deals with quals containing non-shippable expressions; see
https://postgr.es/m/1691374.1671659838@sss.pgh.pa.us. That should
be improved, but I don't think it's within the scope of this patch
series.
Patch by me; thanks to Richard Guo for review.
Discussion: https://postgr.es/m/830269.1656693747@sss.pgh.pa.us
Copy file name to clipboardExpand all lines: contrib/postgres_fdw/expected/postgres_fdw.out
+7-7Lines changed: 7 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -2513,7 +2513,7 @@ SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foo
2513
2513
ALTER SERVER loopback OPTIONS (DROP extensions);
2514
2514
ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0');
2515
2515
EXPLAIN (VERBOSE, COSTS OFF)
2516
-
SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND ft1.c1 = postgres_fdw_abs(ft2.c2))) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;
2516
+
SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.* FROM ft1 INNER JOIN ft2 ON (ft1.c1 = ft2.c1 AND ft1.c1 < 100 AND (ft1.c1 - postgres_fdw_abs(ft2.c2)) = 0)) ss ON (local_tbl.c3 = ss.c3) ORDER BY local_tbl.c1 FOR UPDATE OF local_tbl;
Remote SQL: SELECT r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8, CASE WHEN (r4.*)::text IS NOT NULL THEN ROW(r4."C 1", r4.c2, r4.c3, r4.c4, r4.c5, r4.c6, r4.c7, r4.c8) END, CASE WHEN (r5.*)::text IS NOT NULL THEN ROW(r5."C 1", r5.c2, r5.c3, r5.c4, r5.c5, r5.c6, r5.c7, r5.c8) END, r5.c2 FROM ("S 1"."T 1" r4 INNER JOIN "S 1"."T 1" r5 ON (((r5."C 1" = r4."C 1")) AND ((r4."C 1" < 100)))) ORDER BY r4.c3 ASC NULLS LAST
Copy file name to clipboardExpand all lines: contrib/postgres_fdw/sql/postgres_fdw.sql
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -681,7 +681,7 @@ SELECT * FROM local_tbl LEFT JOIN (SELECT ft1.*, COALESCE(ft1.c3 || ft2.c3, 'foo
681
681
ALTER SERVER loopback OPTIONS (DROP extensions);
682
682
ALTER SERVER loopback OPTIONS (ADD fdw_startup_cost '10000.0');
683
683
EXPLAIN (VERBOSE, COSTS OFF)
684
-
SELECT*FROM local_tbl LEFT JOIN (SELECT ft1.*FROM ft1 INNER JOIN ft2 ON (ft1.c1=ft2.c1ANDft1.c1<100ANDft1.c1= postgres_fdw_abs(ft2.c2))) ss ON (local_tbl.c3=ss.c3) ORDER BYlocal_tbl.c1 FOR UPDATE OF local_tbl;
684
+
SELECT*FROM local_tbl LEFT JOIN (SELECT ft1.*FROM ft1 INNER JOIN ft2 ON (ft1.c1=ft2.c1ANDft1.c1<100AND(ft1.c1- postgres_fdw_abs(ft2.c2)) =0)) ss ON (local_tbl.c3=ss.c3) ORDER BYlocal_tbl.c1 FOR UPDATE OF local_tbl;
685
685
ALTER SERVER loopback OPTIONS (DROP fdw_startup_cost);
686
686
ALTER SERVER loopback OPTIONS (ADD extensions 'postgres_fdw');
0 commit comments