Keep track of what RTIs a Result node is scanning.
authorRobert Haas <rhaas@postgresql.org>
Wed, 9 Apr 2025 14:14:31 +0000 (10:14 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 19 May 2025 15:02:50 +0000 (11:02 -0400)
commit9733f433fe23372b0b7522f384a88825cf59050e
tree129f26146acea4d3d0b266c1dd4e7b02564c17c2
parentad5eaf390c58294e2e4c1509aa87bf13261a5d15
Keep track of what RTIs a Result node is scanning.

Result nodes now include an RTI set, which is only non-NULL when they
have no subplan, and is taken from the relid set of the RelOptInfo
that the Result is generating.

Using that information, EXPLAIN now emits, where relevant, a "Replaces" line
that says whether it replaced a scan, a join, or an aggregate; and in the
former two cases, which relations were involved.

Likewise, pg_overexplain's EXPLAIN (RANGE_TABLE) now displays the RTIs
stored in a Result node just as it already does for other RTI-bearing
node types.
24 files changed:
contrib/file_fdw/expected/file_fdw.out
contrib/pg_overexplain/expected/pg_overexplain.out
contrib/pg_overexplain/pg_overexplain.c
contrib/postgres_fdw/expected/postgres_fdw.out
src/backend/commands/explain.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/setrefs.c
src/include/nodes/plannodes.h
src/test/regress/expected/aggregates.out
src/test/regress/expected/case.out
src/test/regress/expected/generated_virtual.out
src/test/regress/expected/groupingsets.out
src/test/regress/expected/inherit.out
src/test/regress/expected/join.out
src/test/regress/expected/merge.out
src/test/regress/expected/partition_aggregate.out
src/test/regress/expected/partition_join.out
src/test/regress/expected/partition_prune.out
src/test/regress/expected/predicate.out
src/test/regress/expected/rowsecurity.out
src/test/regress/expected/rowtypes.out
src/test/regress/expected/select.out
src/test/regress/expected/subselect.out
src/test/regress/expected/tsrf.out