mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
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
This commit is contained in:
@@ -6210,10 +6210,7 @@ prepare_sort_from_pathkeys(Plan *lefttree, List *pathkeys,
|
||||
* the pathkey's EquivalenceClass. For now, we take the first
|
||||
* tlist item found in the EC. If there's no match, we'll generate
|
||||
* a resjunk entry using the first EC member that is an expression
|
||||
* in the input's vars. (The non-const restriction only matters
|
||||
* if the EC is below_outer_join; but if it isn't, it won't
|
||||
* contain consts anyway, else we'd have discarded the pathkey as
|
||||
* redundant.)
|
||||
* in the input's vars.
|
||||
*
|
||||
* XXX if we have a choice, is there any way of figuring out which
|
||||
* might be cheapest to execute? (For example, int4lt is likely
|
||||
|
||||
Reference in New Issue
Block a user