From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Invent "join domains" to replace the below_outer_join hack. |
Date: | 2023-01-30 19:13:28 |
Message-ID: | E1pMZao-000l40-Q3@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
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
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/3bef56e11650a33f70adeb6dd442bc2b48bb9b72
Modified Files
--------------
contrib/postgres_fdw/expected/postgres_fdw.out | 14 +-
contrib/postgres_fdw/sql/postgres_fdw.sql | 2 +-
src/backend/nodes/outfuncs.c | 1 -
src/backend/optimizer/path/equivclass.c | 133 +++++++++------
src/backend/optimizer/path/joinpath.c | 12 --
src/backend/optimizer/plan/createplan.c | 5 +-
src/backend/optimizer/plan/initsplan.c | 213 +++++++++++++------------
src/backend/optimizer/plan/planner.c | 10 ++
src/backend/optimizer/prep/prepjointree.c | 2 +
src/include/nodes/pathnodes.h | 67 ++++++--
src/include/optimizer/paths.h | 2 +-
src/include/optimizer/planmain.h | 1 -
12 files changed, 269 insertions(+), 193 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2023-01-31 00:49:58 | pgsql: Refactor rmtree() to use get_dirent_type(). |
Previous Message | Tom Lane | 2023-01-30 16:59:41 | pgsql: Doc: clarify behavior of boolean options in replication commands |