unrolled_join.diff.txt
text/plain
commit aa085a812c2db077b86caff366d31624b9a06ecf
Author: Robert Haas <rhaas@postgresql.org>
Date: Thu Jan 8 15:57:34 2026 -0500
fix pgpa_process_unrolled_join return value
diff --git a/contrib/pg_plan_advice/expected/join_order.out b/contrib/pg_plan_advice/expected/join_order.out
index eaaa38f000c..f3dd7810484 100644
--- a/contrib/pg_plan_advice/expected/join_order.out
+++ b/contrib/pg_plan_advice/expected/join_order.out
@@ -159,7 +159,7 @@ SELECT * FROM jo_fact f
JOIN_ORDER(f (d1 d2)) /* matched */
Generated Plan Advice:
JOIN_ORDER(f (d1 d2))
- MERGE_JOIN_PLAIN(d2)
+ MERGE_JOIN_PLAIN((d1 d2))
NESTED_LOOP_MATERIALIZE(d2)
SEQ_SCAN(f d1 d2)
NO_GATHER(f d1 d2)
diff --git a/contrib/pg_plan_advice/pgpa_walker.c b/contrib/pg_plan_advice/pgpa_walker.c
index 4dffc60114a..fdc003ec509 100644
--- a/contrib/pg_plan_advice/pgpa_walker.c
+++ b/contrib/pg_plan_advice/pgpa_walker.c
@@ -438,7 +438,10 @@ static Bitmapset *
pgpa_process_unrolled_join(pgpa_plan_walker_context *walker,
pgpa_unrolled_join *ujoin)
{
- Bitmapset *all_relids = NULL;
+ Bitmapset *all_relids = bms_copy(ujoin->outer.scan->relids);
+
+ /* If this fails, we didn't unroll properly. */
+ Assert(ujoin->outer.unrolled_join == NULL);
for (int k = 0; k < ujoin->ninner; ++k)
{