postgresql/src/include/nodes
Tom Lane 2f17b57017 Improve performance of adjust_appendrel_attrs_multilevel.
The present implementations of adjust_appendrel_attrs_multilevel and
its sibling adjust_child_relids_multilevel are very messy, because
they work by reconstructing the relids of the child's immediate
parent and then seeing if that's bms_equal to the relids of the
target parent.  Aside from being quite inefficient, this will not
work with planned future changes to make joinrels' relid sets
contain outer-join relids in addition to baserels.

The whole thing can be solved at a stroke by adding explicit parent
and top_parent links to child RelOptInfos, and making these functions
work with RelOptInfo pointers instead of relids.  Doing that is
simpler for most callers, too.

In my original version of this patch, I got rid of
RelOptInfo.top_parent_relids on the grounds that it was now redundant.
However, that adds a lot of code churn in places that otherwise would
not need changing, and arguably the extra indirection needed to fetch
top_parent->relids in those places costs something.  So this version
leaves that field in place.

Discussion: https://postgr.es/m/553080.1657481916@sss.pgh.pa.us
2022-08-18 12:36:16 -04:00
..
.gitignore Automatically generate node support functions 2022-07-09 08:53:59 +02:00
bitmapset.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
execnodes.h Doc: rearrange high-level commentary about node support coverage. 2022-07-09 15:10:15 -04:00
extensible.h Automatically generate node support functions 2022-07-09 08:53:59 +02:00
lockoptions.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
makefuncs.h Rename JsonIsPredicate.value_type, fix JSON backend/nodes/ infrastructure. 2022-05-13 11:40:08 -04:00
memnodes.h Mark PlanState as an abstract node type. 2022-07-09 13:35:37 -04:00
nodeFuncs.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
nodes.h Add defenses against unexpected changes in the NodeTag enum list. 2022-07-12 11:22:52 -04:00
params.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
parsenodes.h Fix ENABLE/DISABLE TRIGGER to handle recursion correctly 2022-08-05 09:47:26 +02:00
pathnodes.h Improve performance of adjust_appendrel_attrs_multilevel. 2022-08-18 12:36:16 -04:00
pg_list.h Tidy up code in get_cheapest_group_keys_order() 2022-07-13 14:02:20 +12:00
plannodes.h Mark Scan as an abstract node type, too. 2022-07-09 13:58:06 -04:00
primnodes.h Improve performance of ORDER BY / DISTINCT aggregates 2022-08-02 23:11:45 +12:00
print.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
readfuncs.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
replnodes.h Fix limitations on what SQL commands can be issued to a walsender. 2022-01-24 15:33:38 -05:00
subscripting.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
supportnodes.h Teach planner and executor about monotonic window funcs 2022-04-08 10:34:36 +12:00
tidbitmap.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
value.h Automatically generate node support functions 2022-07-09 08:53:59 +02:00