postgresql/src/include/optimizer
Etsuro Fujita b0e390e6d1 Disallow replacing joins with scans in problematic cases.
Commit e7cb7ee14, which introduced the infrastructure for FDWs and
custom scan providers to replace joins with scans, failed to add support
handling of pseudoconstant quals assigned to replaced joins in
createplan.c, leading to an incorrect plan without a gating Result node
when postgres_fdw replaced a join with such a qual.

To fix, we could add the support by 1) modifying the ForeignPath and
CustomPath structs to store the list of RestrictInfo nodes to apply to
the join, as in JoinPaths, if they represent foreign and custom scans
replacing a join with a scan, and by 2) modifying create_scan_plan() in
createplan.c to use that list in that case, instead of the
baserestrictinfo list, to get pseudoconstant quals assigned to the join;
but #1 would cause an ABI break.  So fix by modifying the infrastructure
to just disallow replacing joins with such quals.

Back-patch to all supported branches.

Reported by Nishant Sharma.  Patch by me, reviewed by Nishant Sharma and
Richard Guo.

Discussion: https://postgr.es/m/CADrsxdbcN1vejBaf8a%2BQhrZY5PXL-04mCd4GDu6qm6FigDZd6Q%40mail.gmail.com
2023-07-28 15:45:04 +09:00
..
appendinfo.h Rework planning and execution of UPDATE and DELETE. 2021-03-31 11:52:37 -04:00
clauses.h Flush Memoize cache when non-key parameters change, take 2 2021-11-24 23:29:56 +13:00
cost.h Change the name of the Result Cache node to Memoize 2021-07-14 12:45:00 +12:00
geqo.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_copy.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_gene.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_misc.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_mutation.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_pool.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_random.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_recombination.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
geqo_selection.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
inherit.h Fix calculation of which GENERATED columns need to be updated. 2023-01-05 14:12:17 -05:00
joininfo.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
optimizer.h Fix incorrect tests for SRFs in relation_can_be_sorted_early(). 2022-08-03 17:33:42 -04:00
orclauses.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
paramassign.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
pathnode.h Allow Memoize to operate in binary comparison mode 2021-11-24 10:07:38 +13:00
paths.h Rename find_em_expr_usable_for_sorting_rel. 2021-04-20 11:37:36 -04:00
placeholder.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
plancat.h Fix calculation of which GENERATED columns need to be updated. 2023-01-05 14:12:17 -05:00
planmain.h Fix pull_varnos' miscomputation of relids set for a PlaceHolderVar. 2021-01-21 15:37:23 -05:00
planner.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
prep.h Fix mishandling of resjunk columns in ON CONFLICT ... UPDATE tlists. 2021-05-10 11:02:29 -04:00
restrictinfo.h Disallow replacing joins with scans in problematic cases. 2023-07-28 15:45:04 +09:00
subselect.h Update copyright for 2021 2021-01-02 13:06:25 -05:00
tlist.h Fix planner failure in some cases of sorting by an aggregate. 2021-04-20 11:32:02 -04:00